簡體   English   中英

奇怪的DateTime解析行為

[英]Weird DateTime parsing behaviour

在將2個字符串解析為DateTime時,我注意到這種奇怪的行為。 第一個字符串(導致異常)“20/10/2013 3:08:30 AM”第二個字符串(正確轉換,沒有例外)“9/10/2013 3:09:37 AM”

用於轉換的代碼是:

string date_1 = "20/10/2013 3:08:30 AM";
string date_2 = "9/10/2013 3:09:37 AM"; 
try
{
DateTime d1 = DateTime.parse(date_1, CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal);   //throws exception (String was not recognized as a valid DateTime)
} catch (Exception ex) { throw ex; }
DateTime d2 =  DateTime.parse(date_2, CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal);

任何人都可以解釋為什么2個字符串代表相同格式的完整日期嗎?

謝謝大家。

這將拋出,因為美國日期符號期望月份為第一個字段:

string d = "20/10/2013 3:08:00 AM";
Console.WriteLine(DateTime.Parse(d, new CultureInfo("en-US")));

對於InvariantCulture也是如此。

這將有效:

DateTime.Parse(d, new CultureInfo("nl-NL"))

解析日期時需要指定區域性。 如果您所在地區的計算機位置設置正確,那么日期也是如此,那么您只需使用當前文化進行解析即可。

例如

string date = "20/10/2013 3:08:00 AM";    
Console.WriteLine(DateTime.Parse(date, CultureInfo.CurrentUICulture));

或者干脆:

string date = "20/10/2013 3:08:00 AM";    
Console.WriteLine(DateTime.Parse(date));

這對我來說在澳大利亞很有用,但是如果您的區域設置是針對美國的,那么您需要指定您希望格式化日期的文化。例如

string date = "20/10/2013 3:08:00 AM";    
Console.WriteLine(DateTime.Parse(date, new CurrentUICulture("en-AU")); //en-GB, etc

可以說,如果您希望日期格式不正確,則使用DateTime.TryParse會更快(也許更安全)。

暫無
暫無

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

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