До сих пор я думал, что буду понимать, как работает DateTime.ParseExact
, но это путает. Почему следующая строка возвращает false
?
DateTime.TryParseExact("2013122", "yyyyMdd", CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None, out lastUpdate)
В месяце могут также быть две цифры. На мой взгляд, он должен уметь понимать, что это означает 22 января 2013 года. Почему я ошибаюсь? Я что-то пропустил или есть простой способ обхода?
Между тем я использую это обходное решение, которое не очень элегантно, но работает:
public static DateTime? ParseDate_yyyyMdd(String date)
{
if (date == null)
return null;
date = date.Trim();
if (date.Length < 7)
return null;
if (date.Length == 7)
date = date.Insert(4, "0");
DateTime dt;
if (DateTime.TryParseExact(date, "yyyyMMdd", CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None, out dt))
return dt;
return null;
}
Дает мой желаемый результат:
DateTime? date = ParseDate_yyyyMdd("2013122");
Console.Write(date.ToString()); // 01/22/2013
Однако меня все еще интересует причина этого ограничения. Возможно, у кого-то есть лучший подход.