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