提问——如果你遇到一个其他语言都不复现,只能在芬兰语测试环境中出现的bug,你的第一反应是什么?admin管理员组文章数量:1644015
(冷场)
好吧,还是先说说我的亲身经历,步骤如下:首先在芬兰语Windows环境安装并配置软件;其次对某一台特定测试机发出请求。返回下图结果。
经过反复验证,该问题在CCJK,FR, DE上均不复现。那么在request场景中,最大的嫌犯就只能是时间格式了吧,来看看Windows的Finland Region设置。
CultureInfo culture = CultureInfo.GetCultureInfo("fi");
Product pro = new Product();
pro.Log = culture + " App Launched...";
pro.LogDate = new DateTime(2016, 8, 5, 1, 2, 3);
var converter = new IsoDateTimeConverter()
{
Culture = culture,
DateTimeFormat = "yyyy-MM-ddTHH:mm:ssZ"
};
string defaultJson = JsonConvert.SerializeObject(pro);
Console.WriteLine(defaultJson);
string isoJson = JsonConvert.SerializeObject(pro, converter);
Console.WriteLine(isoJson);
为了效果展示,我将culture明示为fi,DateTimeFormat也指定了pattern格式。这下应该万无一失,序列化后的时间板儿定输出2016-08-05T01:02:03Z吧?OK! 所见略同,走起。
{"Log":"fi App Launched...","LogDate":"2016-08-05T01:02:03"}
{"Log":"fi App Launched...","LogDate":"2016-08-05T01.02.03Z"}
啊哦~~~这就是生活啊!即便我们煞费苦心的指定了DateTimeFormat pattern,然而一旦遇到这种情况,终究还是根儿红苗正的culture说了算……
长歌当哭,是在痛定思痛之后的。这里我直接放出了InvariantCulture的大招。
CultureInfo culture = CultureInfo.InvariantCulture;
再次运行,这个世界终于清静了。
{"Log":" App Launched...","LogDate":"2016-08-05T01:02:03"}
{"Log":" App Launched...","LogDate":"2016-08-05T01:02:03Z"}
本案中bug正是因为序列化时间日期产生了异常,导致之后的request请求异常,checkin 代码后,问题亦不再出现。那么问题来了——日后当你再次遇到仅在某一个culture或locale出现的国际化bug时,你又会想到什么呢?这就是生活?呃……好吧
本文标签: cultureDateTimeFormat
版权声明:本文标题:当Culture遇上DateTimeFormat 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dianzi/1729377103a1198971.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论