威力強大的 DateTime.ParseExact()

  • 105785
  • 0
  • C#
  • 2008-03-20

威力強大的 DateTime.ParseExact()

參考:【TIPS-.NET DateTime Formating】 by 黑暗執行緒

在【TIPS-.NET DateTime Formating】一文中,有提供 String -> DateTime 的彈性做法,就是利用 DateTime.ParseExact() 方法,只要你知道來源的日期格式,就可以轉換。

但是,事情往往沒有那麼順利,在使用者輸入內容後,從 TextBox 中取出來的字串,不見得符合你的預期的格式,有可能字串前、中、後多了一些空白、有可能 24 小時制與 12 小時制搞混寫錯了,有可能寫【AM 與 PM】而不是【上午與下午】。

幸好 DateTime.ParseExact() 可以做到相當相當地彈性,例如:

string[] DateTimeList = { 
                            "yyyy/M/d tt hh:mm:ss", 
                            "yyyy/MM/dd tt hh:mm:ss", 
                            "yyyy/MM/dd HH:mm:ss", 
                            "yyyy/M/d HH:mm:ss", 
                            "yyyy/M/d", 
                            "yyyy/MM/dd" 
                        }; 
 
DateTime dt = DateTime.ParseExact(" 2008/  3/18   PM 02: 50:23  ", 
                                  DateTimeList, 
                                  CultureInfo.InvariantCulture, 
                                  DateTimeStyles.AllowWhiteSpaces
                                  ); 

宣告一個 String 陣列 DateTimeList,內容值放置所有預期會客制化的日期格式,以符合各種字串來源;使用 CultureInfo.InvariantCulture 解析各種國別不同地區設定;使用 DateTimesStyles.AllowWhiteSpaces 忽略字串一些無意義的空白。如此一來,即使像 " 2008/3 /18 PM 02: 50:23 " 這麼醜陋的字串,也可以成功轉到成 DateTime 型態。