簡體   English   中英

DateTime.ParseExact拋出System.FormatException

[英]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" 0107存在日期和月份。

該日期可以是01st July 2014 07 Jan 201407 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.

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