使用DateTime.TryParseExact 轉換自訂格式日期

  • 1414
  • 0

前陣子接到一個API功能, 因為需要使用者傳入日期, 然後再用這個日期去撈取資料~

而這個日期輸入的格式為yyyyMMdd 例: 20170628

一開始想到的是DateTime.TryParse, 判斷這個字串能否正確轉成日期格式, 但卻一直無法成功轉換~

後來爬文, 才知道遇到這個自定義格式是無法正確辨識的~

 

以下測試2個字串做日期轉換, 可以發現"20170628" 轉出來的日期非預期, 且轉換回失敗~ 另一個2017/06/28 則可以轉換成功~~

遇到"20170628" 這樣子的字串, 或許有人會想用拆解的方式.. 例如取前4碼為年, 再取中間2碼為月份, 最後2碼為日期

但其實不用這麼麻煩... 這時可以使用DateTime.TryParseExact 輕鬆幫我們做轉換

使用時機:

例1: 輸入易混淆不清的日期格式時

DateTime.TryParse(01/06/2017 )=> 2017/06/01 ? 還是 2017/01/06 ?

答案是... 2017/01/06

例2:輸入自訂義日期格式 2017年01月05日 上午10:25:40

使用方法:

DateTime.TryParseExact 方法 (String, String[], IFormatProvider, DateTimeStyles, DateTime)
DateTime.TryParseExact(str,  
                       string[] formats,
                       System.Globalization.CultureInfo.InvariantCulture,
                       System.Globalization.DateTimeStyles.None, 
                       out date) 

MSDN: https://msdn.microsoft.com/zh-tw/library/h9b85w22(v=vs.110).aspx

使用範例:

撰寫一個DataTimeConvert方法, 可以傳入欲轉換的字串, 及語系是否為Tw 的2個參數

接著給2個日期字串, 其中只有下午及PM的不同, 測試文化特性, 若是沒有使用正確的CultureInfo("zh-TW"): 台灣繁體中文的文化特性, 遇到上午或下午 這種時間則無法正確Parse出來