2013-02-13 65 views
2

轉換爲DateTime時,我得到以下異常:字符串未被識別爲有效的DateTime時解析確切

String was not recognized as a valid DateTime. 

lbl_RequestDate.Text = "13/2/2013"; 

CultureInfo provider = CultureInfo.CurrentCulture; 
string[] format = provider.DateTimeFormat.GetAllDateTimePatterns(); 
Follow.RequestDate = DateTime.ParseExact(lbl_RequestDate.Text, format, provider, DateTimeStyles.None); 
+0

什麼是Follow.RequestDate的類型?你運行哪種文化? MM/DD/YYYY是否有效? – Jocke 2013-02-13 09:29:42

+0

什麼是'CurrentCulture'('provider')?在某些文化中,日期分隔符字符串不同於'「/」'。 – 2013-02-13 09:43:00

回答

4

您可以使用thje格式d/M/yyyy,注意本月使用的單個M

Follow.RequestDate = DateTime.ParseExact(lbl_RequestDate.Text, "d/M/yyyy", provider, DateTimeStyles.None); 

的方法:provider.DateTimeFormat.GetAllDateTimePatterns()回報幾乎155格式,但沒有的(從當前的文化似乎)支持格式d/M/yyyy這就是爲什麼你所得到的例外。如果您的日期的月份爲13/02/2013,則該方法返回的格式將起作用,因爲格式數組中最接近的格式爲dd/MM/yyyy

+0

你:他們中沒有一個支持'd/M/yyyy'_的格式,那麼這很大程度上取決於提供者。例如'en-SG'(英語(新加坡)),'pt-BR'(葡萄牙語(巴西)),'el-GR'(希臘語(希臘語))以及其他許多人都支持''d/M/YYYY「'。 – 2013-02-13 10:11:41

+0

@JeppeStigNielsen,哦,太棒了,不知道,謝謝 – Habib 2013-02-13 10:14:34

2

也許這將幫助:

DateTime.ParseExact("13/2/2013","d/M/yyyy",CultureInfo.GetCultureInfo("en-US"), DateTimeStyles.None); 

通知:

d is for Day (01 is also acceptable) 
M is for Month (11 is also acceptable) 
+0

我會很高興知道爲什麼這downvote。雖然它是正確的。 – 2013-02-13 09:28:41

+0

也許是因爲你直接寫入「13/2/2013」​​到方法中? 我不知道,這是對的。 +1 – jAC 2013-02-13 09:31:21

+0

爲什麼要使用'en-US'文化?僅僅因爲它碰巧與問題中提供的日期格式相匹配?對我來說,其他答案是優越的。 – 2013-02-13 09:31:27

1

試試這樣說:

Follow.RequestDate = DateTime.ParseExact(lbl_RequestDate.Text, "d/M/yyyy", CultureInfo.InvariantCulture); 
+1

大多數情況下,當你想要單個'M'時,你也需要單個'd',所以:''d/M/yyyy'''。 – 2013-02-13 09:44:21

+0

@JeppeStigNielsen好了,謝謝。 – 2013-02-13 09:48:06

1

DateTimeFormatInfo.GetAllDateTimePatterns()方法返回我的機器(tr-TR文化)29格式上,但沒有這些支持d/M/yyyy日期格式的,這就是爲什麼你得到FormatException

但是在我的文化DateSeparator.所以我無法確切地使用CultureInfo.CurrentCulture解決這個問題,但是當我使用埃及的CultureInfo(它寫在你的個人資料)CultureInfo.GetCultureInfo("ar-EG")此代碼的工作沒有任何錯誤;

CultureInfo provider = CultureInfo.GetCultureInfo("ar-EG"); 
string[] format = provider.DateTimeFormat.GetAllDateTimePatterns(); 
DateTime d = DateTime.ParseExact("13/02/2013", format, provider, DateTimeStyles.None); 

不幸的是你所有的日期時間模式不支持d/M/yyyy格式。

enter image description here

不幸的是,改變這個字符串 13/02/2013因爲正如我之前所說,我的所有格式(在 tr-TR文化)不支持 dd/MM/yyyy格式要麼不解決這個問題。

我的卑微建議是在這裏,列出所有的日期時間模式,並手動檢查您的字符串是否被識別格式與這種日期時間模式,如;

string[] format = provider.DateTimeFormat.GetAllDateTimePatterns(); 
foreach (var f in format) 
{ 
    /// 
} 

enter image description here

+1

當提供者是'tr-TR'文化時,'DateSeparator'字符串是'「。」'。因此,格式字符串中的任何非轉義斜槓(如「d/M/yyyy」中的斜槓)都會轉換爲句點。所以這應該解析:'DateTime.ParseExact(「13.2.2013」​​,「d/M/yyyy」,新的CultureInfo(「tr-TR」));' – 2013-02-13 09:48:55

+0

@JeppeStigNielsen你是對的。我錯過了。將更新答案。 – 2013-02-13 09:51:38

相關問題