前陣子接到一個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出來