昨晚我们将Web服务层从物理Windows 2008 r2迁移到虚拟Windows 2012.
我们在日志中收到大量关于DateTime无效格式的事件,奇怪的是我们仔细检查了我们的区域设置。
长话短说:
CultureInfo.GetCultureInfo("es-MX").DateTimeFormat.AbbreviatedMonthNames
输出(使用LinqPad5):
关于我们2012年的新环境,而2008年的ouptus:
我们的解析是这样的:
DateTime.Parse("18 ene 16",CultureInfo.GetCultureInfo("es-MX"))
虽然它现在有奇迹但它会抛出
FormatException :
The string was not recognized as a valid DateTime. There is an unknown word starting at index 3.
。
虽然
DateTime.Parse("18 ene. 16",CultureInfo.GetCultureInfo("es-MX"))
有效,但不是我们几个客户的预期输入。
使用相同的运行时版本(4.0.30319.42000),再次检查(再次)我们在两台服务器上的区域设置还有哪些其他方法可以解决此问题(在放弃并使用正则表达式替换进行黑客攻击之前)?
感谢。
答案 0 :(得分:3)
可悲的是,我在配置中找不到任何指向正确方向的东西。
结束了这样讨厌的黑客:
var cultura = CultureInfo.CreateSpecificCulture("es-MX");
if (cultura.DateTimeFormat.AbbreviatedMonthNames.First().EndsWith("."))
cultura.DateTimeFormat.AbbreviatedMonthNames = cultura.DateTimeFormat.AbbreviatedMonthNames.Select(c => c.Substring(0, c.Length > 1 ? c.Length - 1 : 0)).ToArray();
并在解析中使用了这种文化。