扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
最近开发碰到一个关于DateTime转换的业务,几个系统的区域语言(CultureInfo)设置都不一致,位置是控制面板-时钟、语言区域-更改日期、时间和数字格式。
专注于为中小企业提供网站设计、成都做网站服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业乌当免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了近1000家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。线上服务器 en-GB
开发环境 zh-CN
测试服务器 en-US
代码主要涉及两个方法DateTime.ToString()和DateTime.Parse(string),如果各种转换都在同一个application上跑基本是不会有问题,比如:
var d = DateTime.Parse("2013-03-11 00:56:20"); var dStr = d.ToString(); var dNew = DateTime.Parse(dStr);
这样的代码能完全正常的,现在的场景会涉及到一个Console exe(简称A)和IIS上一个Web Service(简称B),麻烦就出现了。
A的CultureInfo默认是读取系统配置,在A中执行
var d = DateTime.Parse("2013-03-11 00:56:20"); var dStr = d.ToString();
三个环境的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中执行
var dNew = DateTime.Parse(dStr);
这时候会发现DateTime.Parse无法识别dStr,这是因为IIS本身有自己默认的CultureInfo设置CultureInfo.InvariantCulture,这个默认配置并不区分en-GB还哦zh-CN等,所以几乎无法识别与CultureInfo有关的日期格式。
解决方案:
1. 设置IIS的CultureInfo为对应值,或者给DateTime.Parse指定对应的CultureInfo,这个方法弊端很大,因为Web Service本身是提供服务给客户端的,如果限制了一个CultureInfo,对来自各个区域的客户端是不公平的,例如设置成zh-CN,我想英国的客户端会疯掉;
2. IIS保持CultureInfo.InvariantCulture默认配置,那么只好设置客户端的CultureInfo,直接也指定成CultureInfo.InvariantCulture,大家都公平就最好了;
总之就是让大家的CultureInfo都一致,不要随便在DateTime.Parse指定CultureInfo我觉得是最好的实践,除非你无法控制dStr的来源格式。
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流