簡體   English   中英

C#DateTime.Parse忽略CultureInfo

[英]C# DateTime.Parse ignores CultureInfo

在澳大利亞工作,並收到來自美國的消息, DateTime錯誤地解析了字符串“ Dec15”,並返回2016年12月15日而不是2015年12月1日 以下摘錄中的“ Dec15”是現實生活中的變量。

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

我不知道該代碼過去曾是一個問題。 我想提供一些幫助,以了解為什么為何使用美國默認的Cultures來忽略/替換CultureInfo

感謝您的任何建議。

由於Dec15不是標准的DateTime格式,因此我猜測解析器無法識別它,無論提供的區域性如何。

為了正確解析它,您可以使用ParseExact方法提供一種使用格式:

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

然后為您提供DateTime對象,以根據需要進一步解析。

一切正常,正如您所見,不忽略區域性,因為您必須手動指定CultureInfo才能獲得所需的錯誤結果。

我100%確定,如果您查看Thread.CurrentThread.CurrentUICulture您將在澳大利亞和美國的計算機上看到不同的結果

解析始終使用CurrentCulture。 如果要固定格式,請使用DateTime.ParseExact方法。

或者您可以強制文化申請,如下所示

另外你可能想看看這個

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM