由于线程的文化信息,DateTime.TryParseExact()失败

时间:2012-01-11 14:25:28

标签: c# .net datetime-format datetime-parsing

我在现有实现中有以下代码行

DateTime.TryParseExact(
    "15/11/2021 00:00:00", 
    "dd/MM/yyyy HH:mm:ss",
    null,
    DateTimeStyles.None,
    out maturityDate);
返回false

表示无法解析传递的字符串。这对我来说真的很令人惊讶,因为这里的模式似乎是准确的。根据MSDN null第三个参数中的值意味着将使用当前的文化信息(我假设它是Thread.CurrentThread.CurrentCulture)。

观察窗口中的

Thread.CurrentThread.CurrentCultureen-US,但文化信息的实例稍后在代码中的某处更改(日期格式化程序或其他内容)。

当我通过CultureInfo.InvariantCulturenew CultureInfo("en-US")时,一切正常。

TryParseExact通过时,有人可以说明导致null失败的原因吗?类似的问题对我没有任何线索。

2 个答案:

答案 0 :(得分:7)

如果您通过null,则会使用CurrentCulture

来自TryParseExact的MSDN文档:

  

如果provider为Nothing,则使用与当前区域性对应的CultureInfo对象。

这意味着如果当前文化使用不同的日期/时间分隔符而不是字符串,则解析将失败。

答案 1 :(得分:0)

15/11/2021不是有效的美国日期格式。 11/15/2021是。我认为你想要的文化是en-GB