直到现在,我还以为我会理解DateTime.ParseExact
工作原理,但这令人困惑。为什么以下行返回false
?
DateTime.TryParseExact("2013122", "yyyyMdd", CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None, out lastUpdate)
该月份也可以有两位数字。我认为它应该能够理解这意味着2013年1月22日。为什么我走错了路?我错过了什么吗,还是有一个简单的解决方法?
同时,我正在使用这种解决方法,它不是很好,但是可以工作:
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
但是,我仍然对此限制的原因感兴趣。也许有人也有更好的方法。
从MSDN文档:
如果您没有在自定义格式模式中使用日期或时间分隔符,请对提供程序参数和每个自定义格式说明符的最大形式使用不变的区域性。例如,如果要在模式中指定小时数,请指定较宽的形式“ HH”而不是较窄的形式“ H”。
我认为原因是它试图从左到右解析(没有回溯)。由于没有定界符,因此无法确定日期部分的边界。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句