先决条件:在 Windows 区域设置中选择英语(美国)格式。在附加设置中,通过指定连字符作为分隔符来自定义时间格式(如“HH-mm-ss”)。
进行这些更改后,以下代码将失败并出现 FormatException(String 未被识别为有效的 DateTime。):
DateTime.Parse(DateTime.Now.ToString());
在 .NET 4.0 和 4.5 中重现。有没有办法避免这个问题?
您可以使用 DateTime.ParseExact 方法。例如:
DateTime.ParseExact(DateTime.Now.ToString(),"HH-mm-ss",null);
好吧,也许这很明显,但不是:
DateTime.Parse(DateTime.Now.ToString())
只需这样做:
DateTime.Now
字符串格式可用于许多事情,但并非所有格式都保证在转换为字符串并再次解析回 a 时完全往返DateTime
。您可能已经特别注意到了,因为时间分隔符被弄乱了,但这也是因为您使用的是默认字符串格式。如果您改为使用它,它会起作用,即使使用奇怪的区域设置:
DateTime.Parse(DateTime.Now.ToString("o"))
但是,在现实世界中几乎没有充分的理由这样做。