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

本文关键字:分隔符 DateTime 失败 Parse 连字符 时间 格式 | 更新日期: 2023-09-27 18:35:15

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

进行这些更改后,以下代码将失败,并显示 FormatException (字符串未被识别为有效的日期时间)。

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

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

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

您可以使用

DateTime.ParseExact 方法。例如:

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

好吧,也许这是显而易见的,但不是:

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

只需这样做:

DateTime.Now
字符串格式

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

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

但是,在现实世界中几乎没有一个很好的理由这样做。

您可能需要阅读有关 DateTime 的标准和自定义格式字符串的信息。