Какая самая длинная строка будет преобразована в допустимое значение DateTime? - PullRequest
0 голосов
/ 16 июня 2020

Я пишу парсер данных и пытаюсь определить, является ли поле числом, датой, строкой и т. Д. c.

. NET DateTime.TryParse работает достаточно медленно при проверке много записей (так как он проверяет много разных форматов даты). Поэтому я хочу сократить обработку, если это возможно. Простая проверка, которую я могу сделать изначально, - это посмотреть на длину строки и отклонить ее, если она выходит за пределы определенных границ.

Самая короткая дата, которую, как мне кажется, разумно ожидать, составляет 6 символов (например, d / M / yy), поэтому я могу выполнить следующую проверку:

if (fieldValue.Length < 6)
{
    // no datetime is shorter than 6 chars (e.g. d/M/yy is the shotest I can think of)
    return false;
}

Какая самая длинная строка все еще представляет DateTime с возможностью синтаксического анализа?

(Например, «Среда, 30 сентября 2020 г., 12:34:56» довольно длинное слово, но я уверен, что есть более длинные примеры!)

Несколько моментов:

  • Я не ищу хитрых ответов где дата дополнена пробелом или чем-то в этом роде.
  • Сначала я сосредоточен на датах Engli sh, но мне было бы интересно, могут ли другие культуры выдавать более длинные примеры.

1 Ответ

1 голос
/ 16 июня 2020

Какая самая длинная строка по-прежнему представляет DateTime с возможностью синтаксического анализа?

Взгляните на список описателей настраиваемого формата для DateTime и учтите все это.

Например, это:

DateTime dt = DateTime.Now;
string strNow = dt.ToString("dddd, MMMM dd, yyyy gg hh:mm:ss.fffffff tt K");
Console.WriteLine(strNow);

Дает:

Tuesday, June 16, 2020 A.D. 08:47:02.2667911 AM -06:00

Но эти разные типы значений могут выводиться по-разному в зависимости от информация в DateTime. ВНИМАТЕЛЬНО посмотрите на все возможные выходные данные для каждого спецификатора в документации, чтобы понять, что я имею в виду.

...