2017年12月8日 星期五

[C#]DateTime.Parse()與Convert.ToDateTime()的差別

以下是我自己理解的DateTime.Parse()與Convert.ToDateTime()的差別:(以下簡稱Parse()與Convert())

兩者其實幾乎是一樣的,如果只看字串轉換成日期型態,兩者的結果應該是一樣的,Convert.ToDateTime()其實只是在內部呼叫DateTime.Parse(),將傳入Convert()的參數再傳入Parse(),最後輸出是一樣的東西。

使用Parse()和Convert(),有兩個主要差別
Parse()本身可以多傳入DataTimeStyles參數,決定輸出時使用不同國家習慣使用的時間格式,但是Convert()則沒有這個傳入參數,取而代之的是呼叫Parse()時是直接傳入本地使用的時間格式。

雖然無法指定時間格式,但是Convert()還有一個與Parse()不一樣的功能,就是可以在要傳入轉換的字串參數使用「null」值,輸出的結果會是最小的時間值。例如:輸入字串是「2017/01」,會得到「0001/01」,使用的函式是DateTime.MinValue。但是在Parse()傳入「null」則會出現例外狀況。

結論
有看到文章專門敘述不應該使用Convert.ToDateTime(),理由是他還會在去呼叫DateTime.Parse(),甚至是說為了效率而應該直接使用DateTime.TryParse()取代其他方式。

我的想法是,使用TryParse()雖然看起來是比較嚴謹的寫法,但是使用TryParse()需要寫另外的程式碼去處理,如果只是要寫很簡單的程序就沒必要用這種方式。

Convert()本身應該是有提供各種變數型態之間的轉換,並且可能也只是呼叫其他類別內建的轉換函式,用意應該是為了讓人使用起來更加直覺,如果只是為了簡單的檢核,加上其他轉換也都是使用Convert開同的轉換方式,本次job使用Convert.ToDateTime()應該更為合適。


DateTime.Parse()、TryParse()、ParseExact()、TryParseExact()本身還是滿好用的,請參考之前的文章



額外補充DateTime.Parse()與Convert.ToDateTime()另一個差別之處,在於是否能夠接受物件型態的傳入參數

如果有明確定義變數型態為DateTime,則兩者皆為正常


若將變數定義為Object,則可發現DateTime.Parse()無法辨別



參考資料

1 則留言:

  1. Blackjack Online - DrmCD
    Free blackjack online 동두천 출장샵 free! Play the best casino games 양산 출장마사지 online at DrmCD. the largest blackjack game 김해 출장마사지 library in 포항 출장샵 the United States. · No download 영주 출장샵 required.

    回覆刪除