在開發中,常常會有DataTime類型和String類型的互相轉換的要求,比較常用的寫法是 var date = Convert.ToDateTime("2012/06/08 09:10:10");
咋一看這個代碼好像沒有什么問題, 實際運行也沒發現問題。但是客戶的機器上卻是有轉換的異常。 后來經過調查發現,客戶電腦上系統設置的CultureInfo是西班牙。這樣代碼會認為2012/06/08 09:10:10 不是一個合法的日期字符串。
正確的寫法應當是: var dtFormat = new DateTimeFormatInfo {LongDatePattern = "yyyy/MM/dd hh:mm:ss"}; //指定以特定格式轉換成DateTime var date = Convert.ToDateTime("2012/06/08 09:10:10", _dtFormat)
DateTime轉換成字符串 var dateString = System.DateTime.Now.ToString()
這樣轉換的字符串同樣會根據運行的系統的CultureInfo不同而有不同格式的輸出。 對于WCF, Web service, Ajax這樣的客戶端和服務端如果是不同的CultureInfo的情況下,非常容易出錯。
在轉換成字符串的時候,加上CultureInfo.InvariantCulture var dateString = System.DateTime.Now.ToString(CultureInfo.InvariantCulture)
同時在從字符串轉換回來的時候, var date = DateTime.Parse(serverInfo.ServerDateTimeString, CultureInfo.InvariantCulture)
這個CultureInfo有點像英語格式,但它不和國家地區掛鉤,它可以提供一個可靠的在多語言環境下的規范格式化 |
|
來自: 悟靜 > 《.net和asp.net》