当连字符用作时间格式的分隔符时,DateTime.Parse失败

时间:2013-10-12 11:40:26

标签: c# .net datetime .net-4.5

先决条件: 在Windows区域设置中,选择英语(美国)格式。在附加设置中通过将连字符指定为分隔符(如“HH-mm-ss”)来自定义时间格式。

在这些更改之后,以下代码因FormatException而失败( String未被识别为有效的DateTime。):

DateTime.Parse(DateTime.Now.ToString());

在.NET 4.0和4.5中重现。 有没有办法避免这个问题?

2 个答案:

答案 0 :(得分:3)

您可以使用DateTime.ParseExact方法。 例如:

DateTime.ParseExact(DateTime.Now.ToString(),"HH-mm-ss",null);

答案 1 :(得分:0)

好吧也许这很明显,但不是:

DateTime.Parse(DateTime.Now.ToString())

这样做:

DateTime.Now

字符串格式可用于许多事情,但并非所有格式都保证在转换为字符串时完全往返并再次解析回DateTime。您可能已经特别注意到因为时间分隔符已被删除,但这也是因为您使用的是默认字符串格式。如果您使用了它,它就会起作用,即使是奇怪的区域设置:

DateTime.Parse(DateTime.Now.ToString("o"))

但是,在现实世界中,几乎没有充分的理由这样做。

您可能希望了解DateTime的{​​{3}}和Standard格式字符串。