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

xen*_*_33 4 .net c# datetime-format datetime-parsing

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

DateTime.TryParseExact(
    "15/11/2021 00:00:00", 
    "dd/MM/yyyy HH:mm:ss",
    null,
    DateTimeStyles.None,
    out maturityDate);
Run Code Online (Sandbox Code Playgroud)

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

Thread.CurrentThread.CurrentCulture在监视窗口中en-US,但是文档信息的实例稍后在代码中的某处被更改(日期时间格式化程序或其他内容).

当我通过CultureInfo.InvariantCulturenew CultureInfo("en-US")一切都好.

任何人都可以说什么导致TryParseExact这里失败的时候null通过?类似的问题对我没有任何线索.

Ode*_*ded 7

如果你通过null,CurrentCulture将使用.

从MSDN文档中TryParseExact:

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

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

  • @ xenn_33 - 否.这意味着在格式字符串中,`/`和`:`被解释为"当前的文化日期/时间分隔符".它们不是文字的. (2认同)