最近開發(fā)碰到一個關(guān)于DateTime轉(zhuǎn)換的業(yè)務,幾個系統(tǒng)的區(qū)域語言(CultureInfo)設置都不一致,位置是控制面板-時鐘、語言區(qū)域-更改日期、時間和數(shù)字格式。
線上服務器 en-GB
開發(fā)環(huán)境 zh-CN
測試服務器 en-US
代碼主要涉及兩個方法DateTime.ToString()和DateTime.Parse(string),如果各種轉(zhuǎn)換都在同一個application上跑基本是不會有問題,比如:
var d = DateTime.Parse("2013-03-11 00:56:20"); var dStr = d.ToString(); var dNew = DateTime.Parse(dStr);
這樣的代碼能完全正常的,現(xiàn)在的場景會涉及到一個Console exe(簡稱A)和IIS上一個Web Service(簡稱B),麻煩就出現(xiàn)了。
A的CultureInfo默認是讀取系統(tǒng)配置,在A中執(zhí)行
var d = DateTime.Parse("2013-03-11 00:56:20"); var dStr = d.ToString();
三個環(huán)境的dStr都不一致
en-GB 11/03/2013 00:56:20
zh-CN 2013/3/11 00:56:20
en-US 11/3/2013 0:56:20 AM
接下去將dStr傳入B,在B中執(zhí)行
var dNew = DateTime.Parse(dStr);
這時候會發(fā)現(xiàn)DateTime.Parse無法識別dStr,這是因為IIS本身有自己默認的CultureInfo設置CultureInfo.InvariantCulture,這個默認配置并不區(qū)分en-GB還哦zh-CN等,所以幾乎無法識別與CultureInfo有關(guān)的日期格式。
解決方案:
1. 設置IIS的CultureInfo為對應值,或者給DateTime.Parse指定對應的CultureInfo,這個方法弊端很大,因為Web Service本身是提供服務給客戶端的,如果限制了一個CultureInfo,對來自各個區(qū)域的客戶端是不公平的,例如設置成zh-CN,我想英國的客戶端會瘋掉;
2. IIS保持CultureInfo.InvariantCulture默認配置,那么只好設置客戶端的CultureInfo,直接也指定成CultureInfo.InvariantCulture,大家都公平就最好了;
總之就是讓大家的CultureInfo都一致,不要隨便在DateTime.Parse指定CultureInfo我覺得是最好的實踐,除非你無法控制dStr的來源格式。
另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。
文章題目:.Net環(huán)境日期格式小結(jié)-創(chuàng)新互聯(lián)
文章轉(zhuǎn)載:http://aaarwkj.com/article20/dipoco.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站策劃、網(wǎng)站設計公司、網(wǎng)站改版、電子商務、網(wǎng)站導航、App開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容