Dot-Net

為什麼 DateTime.ParseExact() 不能使用“M/d/yyyy”解析“9/1/2009”

  • September 2, 2009

我有一個看起來像這樣的字元串:“9/1/2009”。我想將其轉換為 DateTime 對象(使用 C#)。

這有效:

DateTime.Parse("9/1/2009", new CultureInfo("en-US"));

但我不明白為什麼這不起作用:

DateTime.ParseExact("9/1/2009", "M/d/yyyy", null);

日期中沒有單詞(比如“September”),而且我知道具體的格式,所以我寧願使用 ParseExact(我不明白為什麼需要 CultureInfo)。但我不斷收到可怕的“字元串未被辨識為有效的日期時間”異常。

謝謝

一點跟進。以下是 3 種可行的方法:

DateTime.ParseExact("9/1/2009", "M'/'d'/'yyyy", null);
DateTime.ParseExact("9/1/2009", "M/d/yyyy", CultureInfo.InvariantCulture);
DateTime.Parse("9/1/2009", new CultureInfo("en-US"));

這裡有 3 個不起作用:

DateTime.ParseExact("9/1/2009", "M/d/yyyy", CultureInfo.CurrentCulture);
DateTime.ParseExact("9/1/2009", "M/d/yyyy", new CultureInfo("en-US"));
DateTime.ParseExact("9/1/2009", "M/d/yyyy", null);

因此,Parse() 與“en-US”一起使用,但 ParseExact 不適用……出乎意料?

我懷疑問題出在格式字元串中的斜杠與數據中的斜杠之間。這是格式字元串中對文化敏感的日期分隔符,最後一個參數null表示“使用目前文化”。如果您轉義斜杠(“M’/’d’/‘yyyy”)指定CultureInfo.InvariantCulture,就可以了。

如果有人有興趣複製這個:

// Works
DateTime dt = DateTime.ParseExact("9/1/2009", "M'/'d'/'yyyy", 
                                 new CultureInfo("de-DE"));

// Works
DateTime dt = DateTime.ParseExact("9/1/2009", "M/d/yyyy", 
                                 new CultureInfo("en-US"));

// Works
DateTime dt = DateTime.ParseExact("9/1/2009", "M/d/yyyy", 
                                 CultureInfo.InvariantCulture);

// Fails
DateTime dt = DateTime.ParseExact("9/1/2009", "M/d/yyyy", 
                                 new CultureInfo("de-DE"));

引用自:https://stackoverflow.com/questions/1368636