新聞中心
最近開(kāi)發(fā)碰到一個(gè)關(guān)于DateTime轉(zhuǎn)換的業(yè)務(wù),幾個(gè)系統(tǒng)的區(qū)域語(yǔ)言(CultureInfo)設(shè)置都不一致,位置是控制面板-時(shí)鐘、語(yǔ)言區(qū)域-更改日期、時(shí)間和數(shù)字格式。
線上服務(wù)器 en-GB
開(kāi)發(fā)環(huán)境 zh-CN
測(cè)試服務(wù)器 en-US
代碼主要涉及兩個(gè)方法DateTime.ToString()和DateTime.Parse(string),如果各種轉(zhuǎn)換都在同一個(gè)application上跑基本是不會(huì)有問(wèn)題,比如:
var d = DateTime.Parse("2013-03-11 00:56:20"); var dStr = d.ToString(); var dNew = DateTime.Parse(dStr);
這樣的代碼能完全正常的,現(xiàn)在的場(chǎng)景會(huì)涉及到一個(gè)Console exe(簡(jiǎn)稱A)和IIS上一個(gè)Web Service(簡(jiǎn)稱B),麻煩就出現(xiàn)了。
A的CultureInfo默認(rèn)是讀取系統(tǒng)配置,在A中執(zhí)行
var d = DateTime.Parse("2013-03-11 00:56:20"); var dStr = d.ToString();
三個(gè)環(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);
這時(shí)候會(huì)發(fā)現(xiàn)DateTime.Parse無(wú)法識(shí)別dStr,這是因?yàn)镮IS本身有自己默認(rèn)的CultureInfo設(shè)置CultureInfo.InvariantCulture,這個(gè)默認(rèn)配置并不區(qū)分en-GB還哦zh-CN等,所以幾乎無(wú)法識(shí)別與CultureInfo有關(guān)的日期格式。
解決方案:
1. 設(shè)置IIS的CultureInfo為對(duì)應(yīng)值,或者給DateTime.Parse指定對(duì)應(yīng)的CultureInfo,這個(gè)方法弊端很大,因?yàn)閃eb Service本身是提供服務(wù)給客戶端的,如果限制了一個(gè)CultureInfo,對(duì)來(lái)自各個(gè)區(qū)域的客戶端是不公平的,例如設(shè)置成zh-CN,我想英國(guó)的客戶端會(huì)瘋掉;
2. IIS保持CultureInfo.InvariantCulture默認(rèn)配置,那么只好設(shè)置客戶端的CultureInfo,直接也指定成CultureInfo.InvariantCulture,大家都公平就最好了;
總之就是讓大家的CultureInfo都一致,不要隨便在DateTime.Parse指定CultureInfo我覺(jué)得是最好的實(shí)踐,除非你無(wú)法控制dStr的來(lái)源格式。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。
新聞標(biāo)題:.Net環(huán)境日期格式小結(jié)-創(chuàng)新互聯(lián)
文章URL:http://fisionsoft.com.cn/article/dipoco.html