![](/img/trans.png)
[英]Giving System.FormatException: String was not recognized as a valid DateTime. using datetime.ParseExact in C#
[英]DateTime.ParseExact throws System.FormatException
為什么這行代碼有時會拋出System.FormatException
?
DateTime d = DateTime.ParseExact("01.07.2014", "dd/MM/yyyy", CultureInfo.InvariantCulture);
因為您的字符串和格式不匹配。
從文件 ;
使用指定的格式和特定於區域性的格式信息將指定的日期和時間字符串表示形式轉換為其DateTime等效形式。 字符串表示的格式必須與指定的格式完全匹配。
請改用dd.MM.yyyy
格式。
DateTime d = DateTime.ParseExact("01.07.2014",
"dd.MM.yyyy",
CultureInfo.InvariantCulture);
這是一個demonstration
。
請記住, "/"
自定義格式說明符在自定義日期和時間格式中具有特殊含義。 它意味着; 用我當前的文化日期分隔符替換我 。
在你的個人資料中,它說你來自阿塞拜疆。 這意味着您的CurrentCulture
可能是az-Cyrl-AZ
(西里爾語,阿塞拜疆語)或az-Latn-AZ
(拉丁語,阿塞拜疆語)。
實際上 ,在這種情況下你使用哪種文化並不重要,因為這兩種文化都有.
作為DateSeparator
屬性 。
這意味着您的原始代碼也適用於您的CurrentCulture
。
DateTime d = DateTime.ParseExact("01.07.2014",
"dd/MM/yyyy",
CultureInfo.CurrentCulture);
// or you can use null
有關更多信息,請查看;
你需要一種文化"."
是DateSeparator
,例如:
DateTime d = DateTime.ParseExact("01.07.2014", "dd/MM/yyyy",
CultureInfo.GetCultureInfo("az-Cyrl-AZ"));
如果你在阿塞拜疆並使用阿塞拜疆語和西里爾文字。
您可以使用:
DateTime d = DateTime.ParseExact("01.07.2014", "dd/MM/yyyy",
null);
只是采取當前的文化。
也許你只需要"d"
而不是冗長的"dd/MM/yyyy"
,因為阿塞拜疆的標准短日期格式就像"01.07.2014"
。
“不變文化”使用"/"
作為其DateSeparator
,因此您不應在您的情況下使用它。
此外,這有效:
DateTime d = DateTime.ParseExact("01.07.2014", "dd/MM/yyyy",
new DateTimeFormatInfo { DateSeparator = ".", }
);
因為new DateTimeFormatInfo()
一個讀/寫“不變文化”日期/時間信息,您可以為其更改相關屬性。
日期格式中的/
將匹配您指定的區域性的日期分隔符。 如果您使用具有句點作為日期分隔符的區域性,則解析將起作用。
例:
DateTime d = DateTime.ParseExact("01.07.2014", "dd/MM/yyyy", CultureInfo.GetCultureInfo("de"));
您還可以使用文字句點而不是日期分隔符特定,然后它使用不變文化:
DateTime d = DateTime.ParseExact("01.07.2014", "dd.MM.yyyy", CultureInfo.InvariantCulture);
參考: 自定義日期和時間格式字符串
問題:
你的日期分隔符是.
而在字符串格式中它是/
解:
您的格式應為"dd.MM.yyyy"
或"MM.dd.yyyy"
因為您的日期為"01.07.2014"
。 01
和07
存在日期和月份。
該日期可以是01st July 2014
07 Jan 2014
或07 Jan 2014
01st July 2014
07 Jan 2014
。
你的代碼應該是
DateTime d = DateTime.ParseExact("01.07.2014",
"dd.MM.yyyy",
CultureInfo.InvariantCulture);
要么
DateTime d = DateTime.ParseExact("01.07.2014",
"MM.dd.yyyy",
CultureInfo.InvariantCulture);
您擁有的格式與提供的字符串不同:
嘗試下面的任何一個,它會工作:)
DateTime d1 = DateTime.ParseExact("01/07/2014", "dd/MM/yyyy", CultureInfo.InvariantCulture);
DateTime d2 = DateTime.ParseExact("01.07.2014", "dd.MM.yyyy", CultureInfo.InvariantCulture);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.