摘要:C# - DateTime.ParseExact 與 DateTime.TryParseExact
最近遇到了一個狀況,那就是我的檔案中有這樣的一串日期時間字串
=> string str = "20091014223600"; 
以往第一個念頭就是...我切...
反正格式固定,前四為西元年後面的部份就以此類推一直到秒,怕讀到的資料會少,那就多個判斷。更了不起的,可能就 正規表示式 就下去了。
不過,這樣寫真的很累,也容易忘記。貼心的微軟有替我們想到,那就是 DateTime.ParseExact 與 DateTime.TryParseExact,以下就來看看範例唄...
01 
private void btnParseExact_Click(object sender, EventArgs e) 
02
{ 
03
 string str = "20091014223600"; 
04
 
05
 IFormatProvider ifp = new CultureInfo("zh-TW", true); 
06
 
07
 DateTime dt = DateTime.ParseExact(str, "yyyyMMddHHmmss", ifp); 
08
 
09
 MessageBox.Show(dt.ToString()); 
10
} 
11
 
12
private void btnTryParseExact_Click(object sender, EventArgs e) 
13
{ 
14
 string str = "20091014223600"; 
15
 
16
 DateTime dt; 
17
  
18
 DateTime dtNow = DateTime.Now; 
19
  
20
 IFormatProvider ifp = new CultureInfo("zh-TW", true); 
21
 
22
 if (DateTime.TryParseExact(str, "yyyyMMddHHmmss", ifp, DateTimeStyles.None, out dt)) 
23
  MessageBox.Show(dt.ToString()); 
24
 else 
25
  MessageBox.Show(dtNow.ToString()); 
26
}
private void btnParseExact_Click(object sender, EventArgs e) 02
{ 03
 string str = "20091014223600"; 04
 05
 IFormatProvider ifp = new CultureInfo("zh-TW", true); 06
 07
 DateTime dt = DateTime.ParseExact(str, "yyyyMMddHHmmss", ifp); 08
 09
 MessageBox.Show(dt.ToString()); 10
} 11
 12
private void btnTryParseExact_Click(object sender, EventArgs e) 13
{ 14
 string str = "20091014223600"; 15
 16
 DateTime dt; 17
  18
 DateTime dtNow = DateTime.Now; 19
  20
 IFormatProvider ifp = new CultureInfo("zh-TW", true); 21
 22
 if (DateTime.TryParseExact(str, "yyyyMMddHHmmss", ifp, DateTimeStyles.None, out dt)) 23
  MessageBox.Show(dt.ToString()); 24
 else 25
  MessageBox.Show(dtNow.ToString()); 26
}結果:
當 string str = "20091014223600"; 改為 string str = "200910142236";,就只會傳回現在的時間。
參考:
DateTime.ParseExact
DateTime.TryParseExact
格式化特定文化特性的日期和時間
 

