Win32: Как преобразовать строку в дату?

В Windows я хочу проанализировать a string как a date использование точной строки формата.

Например, учитывая строку

"6/12/2010"

и формат:

"M/d/yyyy"

я хочу преобразовать строку в дату при обеспечении, что дата соответствует формату.

я также должен смочь указать относящееся к двухтысячному году раздвижное окно, центр. Это означает, что, если 2-разрядный год (правильно) вводится, я укажу, что число лет в будущем полагал бы, что год. например:

Two-digit Year    Pivot    Four-digit year
==============    =====    ===============
30                +0       1929
30                +18      1929
30                +19      1929
30                +20      2029
30                +21      2029
30                +100     2029

.NET уже обеспечивает a DateTime.ParseExact функция, которая выполняет почти точно, в чем я нуждаюсь:

date = DateTime.ParseExact("6/12/2010", 
         DateTimeFormatInfo.ShortDatePattern,
         Thread.CurrentThread.CurrentCulture);

Кроме я не могу сказать этому 100-летнее значение центра.

Больше примеров:

String        Format Specifier        Date
"6/7/2029"   "M/d/yyyy"             6/7/2029
"6/7/29"     "M/d/yyyy"             (invalid, year too short)
"6/7/29"     "M/d/yy"               6/7/1929  (+0 pivot)
"6/7/29"     "M/d/yy"               6/7/2029  (+100 pivot
"6/7/29"     "M/d/yy"               6/7/2029  (+50 pivot)
"6/7/29"     "M/d/yy"               6/7/2029
"6/7/2029"   "M.d.yyyy"             (invalid, incorrect separators)
"6.7.2029"   "M.d.yyyy"             6/7/2029
"6.7.2029"   "M-d-yyyy"             (invalid, incorrect separators)
"6/7/2029"   "M/dd/yyyy"            (invalid, days requires leading zero)
"6/07/2029"  "M/dd/yyyy"            (invalid, days requires leading zero)    
"6/07/2029"  "MM/dd/yyyy"           (invalid, months requires leading zero)
"06/07/2029  "MM/dd/yyyy"           6/7/2029
"06/07/2029" "MM/d/yyyy"            (invalid, days should not have leading zero)
"06/7/2029"  "MM/d/yyyy"            6/7/2029

я знаю, что Windows не имеет встроенного API для преобразования строки в дату.

Есть ли любой установленный код там, который преобразует a string к a date использование спецификатора формата? Компьютеры были вокруг некоторое время теперь; кто-то уже, должно быть, решил эту проблему.

Вот список некоторых демонстрационных спецификаторов формата, которые Вы, как могли ожидать, будете видеть в Windows:

  • M/d/yyyy
  • M/d/yy
  • M/dd/yyyy
  • M/dd/yy
  • MM/d/yyyy
  • MM/d/yy
  • MM/dd/yyyy
  • MM/dd/yy
  • d/M/yyyy
  • d/M/yyy
  • d/MM/yyyy
  • d/MM/yy
  • dd/M/yyyy
  • dd/M/yy
  • dd/MM/yyyy
  • dd/MM/yy
  • yyyy/M/d
  • yy/M/d
  • yyyy/MM/d
  • yy/MM/d
  • yyyy/MM/dd
  • yy/MM/dd
  • dd MM yyyy
  • dd.MM.yyyy

См. также

5
задан Community 23 May 2017 в 10:29
поделиться