2010-10-05 80 views
7

我正在解析一个字符串以将其转换为DateTime。我在某些情况下,得到一个错误:DateTime.Parse:更改文化时发生异常

String was not recognized as a valid DateTime. 

我只得到,如果我跑从位于不同的国家比美国的计算机应用此错误。我在字符串中看到的是09/20/2010 14:11,在这种情况下,我得到一个异常。如果我的值如下:10/05/2010 12:54我没有发现异常。我想这是事实,那天是20,这台电脑在欧洲,所以它认为20是这个月。问题是我强迫它是EN-US:

CompletedDttm = DateTime.ParseExact(value, "MM/dd/yyyy hh:mm", new CultureInfo("en-US")); 

因为我收到例外,我想知道这是正确的做法。

任何想法如何解析一个字符串的方式,无论我在机器上运行什么样的文化?

+0

如果您知道格式将始终如此,您可以使用DateTime.Parse(值,CultureInfo.InvariantCulture);就日期和时间格式而言,InvariantCulture大致相当于en-US。顺便说一句,如果你像这样解析它,.Net将无法确定时区,它实际上会将你的日期时间视为可能导致错误的“未指定的本地”。如果您知道该源使用UTC,请使用以下内容:DateTime.Parse(value,CultureInfo.InvariantCulture,DateTimeStyles.AssumeUniversal); – 2010-10-05 19:51:31

回答

10

您应该使用“HH:mm”而不是“hh:mm” - “HH”用于24小时制; “hh”是一个12小时的时钟。所以14不是“hh”的有效值。

即使在美国机器上,我也希望看到同样的问题,但是......也许你碰巧由于时区差异而只能在美国机器上下午1点之前?

+0

我想,这是问题所在。它现在有效。 – tony 2010-10-05 18:10:55

+0

非常感谢您的及时帮助 Tony – tony 2010-10-05 18:11:27