Dot-Net
為什麼 DateTime.ParseExact() 不能使用“M/d/yyyy”解析“9/1/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"));