转换日期时间引发错误:字符串未被识别为“06-13-2012”的有效日期时间

本文关键字:时间 06-13-2012 识别 有效日期 日期 错误 字符串 转换 | 更新日期: 2023-09-27 18:37:11

我正在将一个日期插入到我的数据库中,该值来自:

s.theDate = Convert.ToDateTime("06-13-2012");

我收到错误"字符串未被识别为有效的日期时间"。我该如何解决此问题?

转换日期时间引发错误:字符串未被识别为“06-13-2012”的有效日期时间

试试这个:

DateTime.ParseExact("06-13-2012", "MM-dd-yyyy", System.Globalization.CultureInfo.InvariantCulture)
s.theDate = DateTime.ParseExact("06-13-2012", "MM-dd-yyyy", System.Globalization.CultureInfo.InvariantCulture)

使用 InvariantCulture 查看DateTime类型上ToString的行为,如下所示:

new DateTime(2012, 6, 13).ToString(CultureInfo.InvariantCulture)

结果在:

06/13/2012 00:00:00

因此,相反,可以假设使用固定区域性解析日期可以正常工作:

Convert.ToDateTime("06-13-2012", CultureInfo.InvariantCulture)

。确实如此。

话虽如此,假设日期/时间格式有点危险。 我想说的是,在考虑 UI 时,您希望格式特定于区域性。 否则,您可能希望格式与区域性无关。 尽管Microsoft采用 MM/dd/yyyy 作为与文化无关的格式,但它是一种模棱两可的格式,我不想在其上构建大型系统。

只需按照已经建议的方式使用ParseExact或使用第二个参数填充Convert.ToDateTime

Convert.ToDateTime("06-13-2012", new DateTimeFormatInfo{FullDateTimePattern = "MM-dd-yyyy"});

有一个称为ISO 8601的全球标准,您可以(imo应该)使用。使用此标准,这就是您最终会得到的。

Convert.ToDateTime("2012-06-03");