在澳大利亚工作并收到美国的消息,DateTime
错误地解析字符串“Dec15”并返回 2016年12月15日而不是 2015年12月1日。下面的片段中的“Dec15”是现实生活中的变量。
var date = DateTime.Parse("Dec15", new CultureInfo("en-AU")); //returns December 1 2015
即使在更改了我的PC Formats&位置指向美国。
但是,如果我更改代码以使用美国文化,我可以复制。
var date = DateTime.Parse("Dec15", new CultureInfo("en-US")); //returns December 15 2016
我不知道代码过去是个问题。我想帮助理解为什么CultureInfo
被忽略/替换为美国那里的默认文化。
感谢您提出的任何建议。
答案 0 :(得分:2)
由于Dec15
不是标准的DateTime格式,我的猜测是,无论提供的文化如何,解析器都无法识别它。
为了正确解析它,您可以使用ParseExact
方法提供要使用的格式:
var date = DateTime.ParseExact("Dec15", "MMMyy", CultureInfo.InvariantCulture);
然后,它会为您提供一个DateTime
对象,以便根据需要进一步解析。
答案 1 :(得分:2)
一切正常,正如您所看到的那样,文化不会被忽略,因为您必须手动指定CultureInfo才能获得所需的错误结果。
我百分百肯定,如果您查看Thread.CurrentThread.CurrentUICulture
,您会在澳大利亚和美国的机器上看到不同的结果
解析总是使用CurrentCulture。如果您想要固定格式,只需使用DateTime.ParseExact
方法。
或者你可以强制申请文化as shown here
您也可以查看this