今天看到朋友寫了一段程式是用來判斷日期格式是否正確
今天看到朋友寫了一段程式是用來判斷日期格式是否正確
try
{
int year = int.Parse(dateString.Substring(0, 4));
int MM = int.Parse(dateString.Substring(4, 2));
int dd = int.Parse(dateString.Substring(6, 2));
DateTime datetime = new DateTime(year, MM, dd);
_result = true;
}
catch (Exception)
{
_result = false;
}
第一眼看到的感覺是.net應該有TryParse系列的method來處理型態的轉換吧
朋友說因為傳進DateTime.TryParse明明是正確的日期格式,但是卻回傳false
看一看程式員邏輯感覺好像是傳入20091010的值,但是DateTime.TryParse應該要傳入的格式是yyyy/MM/dd才對
當然會出錯,不過實務上在開發時日期本來就有很多種格式了,只是這時候DateTime.TryParse就不方便了
此時有DateTime.TryParseExact可以用
可以改成這樣
DateTime _datetime;
_result = DateTime.TryParseExact(
dateString,
"yyyyMMdd",
DateTimeFormatInfo.InvariantInfo,
DateTimeStyles.None, out _datetime
);
改完後當然要檢查一下效能會不會變比較差囉
DateTime _datetime;
string datetimeString = "20100404";
Stopwatch _watch = new Stopwatch();
_watch.Start();
for (int i = 0; i < 1000000; i++)
{
int year = int.Parse(datetimeString.Substring(0, 4));
int MM = int.Parse(datetimeString.Substring(4, 2));
int dd = int.Parse(datetimeString.Substring(6, 2));
DateTime datetime = new DateTime(year, MM, dd);
}
_watch.Stop();
Response.Write(string.Format("使用 :{0} 秒<br/>", _watch.ElapsedMilliseconds / 1000d));
_watch = Stopwatch.StartNew();
for (int i = 0; i < 1000000; i++)
{
DateTime.TryParseExact(datetimeString, "yyyyMMdd", DateTimeFormatInfo.InvariantInfo, DateTimeStyles.None, out _datetime);
}
Response.Write(string.Format("使用 :{0} 秒<br/>", _watch.ElapsedMilliseconds / 1000d));
可以放心了,沒有比較慢
反而測試是TryParseExact比較快
整個method比較要注意的是IFormatProvider這個參數,因為datetime的時間格是比較容易因為地區語言有不一樣
不過我想不管是哪裡 傳入yyyyMMdd應該都是沒什麼問題才是
參考資料
http://msdn.microsoft.com/zh-tw/library/ms131044%28v=VS.90%29.aspx