2010-09-16 205 views
2

我想將文本轉換爲日期時間但出現錯誤。我的文本框值爲格式dd/MM/yyyy 字符串未被識別爲有效的DateTime。將文本轉換爲日期時間?

myFtMaster.GENTRTYDATEFROM =Convert.ToDateTime(txtTreatyPeriodfrom.Text.ToString()); 

我的業務對象'gentrtydatefrom'數據類型是DateTime。還有什麼是最好的方法來避免這些類型的錯誤,而不使用Try catch塊。

+0

請記住,將字符串轉換爲DateTime取決於格式和文化(例如,美國傾向於使用MM/DD/yyyy,但其他國家使用dd/MM/yyyy),所以通常最好是要求特定的格式,並使用TryParse來處理失敗的分析。 – 2010-09-16 08:13:10

+0

謝謝哈科。我會牢記這一點。 – 2010-09-16 09:15:42

回答

3

你要麼指定使用特定格式的文化:

myFtMaster.GENTRTYDATEFROM = Convert.ToDateTime(
    txtTreatyPeriodfrom.Text, CultureInfo.GetCulture("en-GB") 
); 

或使用ParseExact方法:

myFtMaster.GENTRTYDATEFROM = DateTime.ParseExact(
    txtTreatyPeriodfrom.Text, "dd/MM/yyyy", CultureInfo.Invariant 
); 

ParseExact方法只接受特定的格式,而Convert.ToDateTime方法仍然允許格式上的一些變化,並且還接受一些其他日期格式。

爲了趕上非法輸入,你可以使用TryParseExact方法:

DateTime d; 
if (DateTime.TryParseExact(txtTreatyPeriodfrom.Text, "dd/MM/yyyy", CultureInfo.Invariant, DateTimeStyles.None, out d)) { 
    myFtMaster.GENTRTYDATEFROM = d; 
} else { 
    // communcate the failure to the user 
} 
+0

謝謝你Guffa。只是一個小問題,ParseExact&Parse有什麼區別?另外爲什麼大多數研究人員傾向於使用ParseExact? – 2010-09-16 07:47:22

+0

儘管我指定格式如myFtMaster.GENTRTYDATEFROM = DateTime.ParseExact(txtTreatyPeriodfrom.Text.ToString(),「dd/MM/yyyy」,new System.Globalization.CultureInfo(「 en-CA「,true)); – 2010-09-16 07:56:21

+0

沒問題,轉換仍然取決於頁面的文化設置。由於我沒有設置爲en-CA,因此轉換可能無法正常工作。 – 2010-09-16 08:03:25

3

使用類似替代以下幾點:

 DateTime date = DateTime.MinValue; 
     DateTime.TryParse(txtTreatyPeriodfrom.Text, out date); 

的TryParse類似於DateTime.Parse()但如果轉換失敗,則不拋出異常。

如果你想使用EN-CA特定文化使用以下命令:

DateTime.TryParse(txtTreatyPeriodfrom.Text, new CultureInfo("en-CA"), 
       DateTimeStyles.AllowWhiteSpaces, out date); 

那麼顯然對付那些無法解析日期。

確保用戶在格式上提示將明顯減少錯誤。

+0

'TryParse'方法返回解析是否成功。在調用之前將該變量設置爲DateTime.MinValue是不必要的,因爲無論解析是否成功,該值總是在方法中被替換。 – Guffa 2010-09-16 07:48:47

+0

如果解析失敗,則說明日期等於DateTime.MinValue。設置它是不必要的,但我認爲維護代碼的人更容易閱讀。尤其是當您添加處理日期處理的代碼時。但無論如何,謝謝你補充說明。 – 2010-09-16 07:57:59

2

看一看

DateTime.TryParse(String value, out DateTime, [culture settings]) 
相關問題