# 使用DateTime.TryParse()取代Convert.DateTime() ###### 發布日期:2017-08-03 | 存檔日期:2023-06-17 ###### 原文網址:https://bmtnote.blogspot.com/2017/08/datetimetryparseconvertdatetime.html   這篇文章是今天實習時,正職的同事希望我能夠了解在C#中使用DateTime.Parse()和Convert.DateTime()的差別,找到的其中一篇英文文章是在敘說使用DateTime.TryParse()替代包括Convert.DateTime()和DateTime.Parse()在內的其他方式。   是不是一定要用某種方法我想是因情況而定啦... 不過文章有解釋關於DateTime.Parse()和Convert.DateTime()之間的關係,在閱讀時就順便將他翻譯成中文,以下是隨意翻譯的內容: 原文標題:[Why use DateTime.TryParse() instead of Convert.DateTime()](http://dotnetinterviewcracker.blogspot.tw/2013/01/why-use-datetimetryparse-instead-of.html) 翻譯標題:為何要使用DateTime.TryParse()替代Convert.DateTime()?   Convert.ToDateTime()其實是在內部呼叫 DateTime.Parse()這個函式將字串轉換為日期格式,而DateTime.Parse()的日期格式參數則是直接傳入本機的設定,也可在字串參數傳入null則會回傳該日期格式的最小值。   簡單來說,就是Convert.ToDateTime()無法自行依據各地時間文化設定格式,如果要自行設定就得使用DtateTime.Parse()。   註:如果不確定字串是不是合法的時間格式,可以使用DateTime.TryParse()進行確認。   如果你已經確定字串屬於不合法的時間格式,但是你知道這個時間格式的規律,可以使用DateTime.ParseExact()或DateTime.TryParseExact()的方式。需要注意在某些情況下DateTime.Parse()會執行失敗。(因為Conver.ToDateTime()實際上是使用DateTime.Parse()內部轉換,所以這些情況也適用於Conver.ToDateTime())   參考下方提供的情境:   當使用者輸入一個不合法的日期格式,DateTime.Parse()會回傳FormatException訊息。 ```C#=1 // throws FormatException, not a valid format var dt1 = DateTime.Parse(""); // throws FormatException, February doesn’t have a 30th day, not a valid date var dt2 = DateTime.Parse("02/30/2010 12:35"); ``` 註:建議使用DateTime.TryParse()模式避免發生例外情況,特別是程式允許使用者手動輸入的情況下。   要注意的是,DateTime.Parse()其實就是DateTime.TryParse(),只不過是在處理例外狀況時,將事件丟給TryParse()處理並回傳false而已。因此,Parse()執行時大致上就如同下面的虛擬碼: ```C#=+ // rough psuedo-code of Parse() public DateTime Parse(string inputString) { DateTime result; if (!DateTime.TryParse(inputString, out result)) { throw new FormatException(...); } return result; } ```   所以直接呼叫DateTime.TryParse()是更有效率的作法,這個方法可以避免程式層層呼叫,並且不會回傳一個沒有意義的例外狀況錯誤訊息。 ###### tags: `C#` `blogspot存檔` `Public`