2012-01-11 19 views
4

我有下面的代码行中已有的实现DateTime.TryParseExact()失败,因为线程的文化信息

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.CurrentCulture在观察窗口中是en-US,但文化信息的实例在代码稍后(日期时间格式化程序或其他)中被更改。

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

请问谁能在null通过时说出什么原因导致TryParseExact的故障?类似的问题没有给我提供任何线索。

+0

你可以使用'DateTime.TryParse(字符串,出日期时间)'? – 2012-01-11 14:28:12

+0

它也失败 – 2012-01-11 14:39:39

回答

7

如果您通过null,将使用CurrentCulture

从MSDN文档TryParseExact

如果提供者是没什么,对应于使用当前培养CultureInfo对象。

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

+0

这是否意味着当前文化的日期/时间分隔符比我的格式字符串(第二个参数)中的相同分隔符具有更高的优先级? – 2012-01-11 14:41:44

+2

@ xenn_33 - 否。这意味着在一个格式字符串中,'/'和':'被解释为“当前的文化日期/时间分隔符”。它们不是字面的。 – Oded 2012-01-11 14:48:07

0

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

+0

我只想弄清楚代码出了什么问题。顺便通过新的CultureInfor(“en-US”)顺利通过。结果是11/15/2021 12:00:00 AM – 2012-01-11 14:45:55

+0

你的权利,我错过了在OP。 – 2012-01-11 14:51:54

相关问题