2016-05-17 27 views
2

工作,並已收到消息從我們DateTime被錯誤解析字符串「Dec15」和返回二零一六年十二月十五日代替2015年12月1日。以下片段中的「Dec15」是現實生活中的變量。C#DateTime.Parse忽略了在澳大利亞的CultureInfo

var date = DateTime.Parse("Dec15", new CultureInfo("en-AU")); //returns December 1 2015 

我不能複製甚至改變了我的PC格式&位置後指向美國。

但是,如果我更改代碼以使用美國文化,我可以複製。

var date = DateTime.Parse("Dec15", new CultureInfo("en-US")); //returns December 15 2016 

我不知道代碼在過去一直是個問題。我想了解一些幫助,理解爲什麼CultureInfo被忽略/替換爲在美國那裏似乎有默認文化。

感謝您的任何建議。

+1

我在澳大利亞我和'DateTime.Parse(「Dec15」)'確實返回第一2015年12月,而不是12月15日,所以我認爲他們在澳大利亞的事實是一個紅鯡魚,這是另一個問題 – Rob

+1

Dec15確實是2016-12-01 ...沒有辦法解決這個問題據我所知,配置單應用程序(http://stackoverflow.com/questions/9104084/how-do-i-set-cultureinfo-currentculture-from-an-app-config-file) - 但如果你可以' t修復你的破解日期解析,你可以要求你的用戶改變地區,以任何你喜歡... –

回答

2

由於Dec15不是標準的DateTime格式,我的猜測是解析器無法識別它,無論提供的文化如何。

爲了正確地解析,則可以使用該方法ParseExact以提供格式的使用方法:

var date = DateTime.ParseExact("Dec15", "MMMyy", CultureInfo.InvariantCulture); 

也就是說然後爲您提供DateTime目的是進一步解析爲你需要。

+0

是一個更強大的解決方案,但需要一個新的版本。我希望客戶端可以解決這個問題。 – RobCroll

2

它一切正常,並且您可以看到文化不被忽略,因爲您必須手動指定CultureInfo才能獲得所需的錯誤結果。

我100%肯定,如果你會看Thread.CurrentThread.CurrentUICulture你會看到在澳大利亞和美國

解析始終使用的CurrentCulture機器不同的結果。如果你想要固定格式,只需使用DateTime.ParseExact方法。

或者你可以力的文化應用as shown here

你也可能想看看this

+1

但不應將CultureInfo類傳遞給datetime的Parse方法,應該爲該方法調用覆蓋? – Baahubali

+0

是的,它應該。但從我的理解,原代碼使用方法的一個參數重載 –

+0

原始代碼是第一個片段,我期望它使用「en-AU」文化日期格式 – RobCroll