溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

.Net環(huán)境日期格式小結(jié)

發(fā)布時(shí)間:2020-07-11 23:38:54 來源:網(wǎng)絡(luò) 閱讀:964 作者:風(fēng)木草 欄目:編程語言

最近開發(fā)碰到一個(gè)關(guān)于DateTime轉(zhuǎn)換的業(yè)務(wù),幾個(gè)系統(tǒng)的區(qū)域語言(CultureInfo)設(shè)置都不一致,位置是控制面板-時(shí)鐘、語言區(qū)域-更改日期、時(shí)間和數(shù)字格式。

線上服務(wù)器 en-GB

開發(fā)環(huán)境 zh-CN

測試服務(wù)器 en-US

代碼主要涉及兩個(gè)方法DateTime.ToString()和DateTime.Parse(string),如果各種轉(zhuǎn)換都在同一個(gè)application上跑基本是不會(huì)有問題,比如:

var d = DateTime.Parse("2013-03-11 00:56:20");
var dStr = d.ToString();
var dNew = DateTime.Parse(dStr);

這樣的代碼能完全正常的,現(xiàn)在的場景會(huì)涉及到一個(gè)Console exe(簡稱A)和IIS上一個(gè)Web Service(簡稱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無法識別dStr,這是因?yàn)镮IS本身有自己默認(rèn)的CultureInfo設(shè)置CultureInfo.InvariantCulture,這個(gè)默認(rèn)配置并不區(qū)分en-GB還哦zh-CN等,所以幾乎無法識別與CultureInfo有關(guān)的日期格式。


解決方案:

1. 設(shè)置IIS的CultureInfo為對應(yīng)值,或者給DateTime.Parse指定對應(yīng)的CultureInfo,這個(gè)方法弊端很大,因?yàn)閃eb Service本身是提供服務(wù)給客戶端的,如果限制了一個(gè)CultureInfo,對來自各個(gè)區(qū)域的客戶端是不公平的,例如設(shè)置成zh-CN,我想英國的客戶端會(huì)瘋掉;

2. IIS保持CultureInfo.InvariantCulture默認(rèn)配置,那么只好設(shè)置客戶端的CultureInfo,直接也指定成CultureInfo.InvariantCulture,大家都公平就最好了;

總之就是讓大家的CultureInfo都一致,不要隨便在DateTime.Parse指定CultureInfo我覺得是最好的實(shí)踐,除非你無法控制dStr的來源格式。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI