DateTimeFormat.AbbreviatedMonthNames在月末的名称中添加一个点

时间:2016-05-20 20:04:40

标签: c# cultureinfo

昨晚我们将Web服务层从物理Windows 2008 r2迁移到虚拟Windows 2012.

我们在日志中收到大量关于DateTime无效格式的事件,奇怪的是我们仔细检查了我们的区域设置。

长话短说:

CultureInfo.GetCultureInfo("es-MX").DateTimeFormat.AbbreviatedMonthNames

输出(使用LinqPad5):

  1. 二月
  2. 三月
  3. 关于我们2012年的新环境,而2008年的ouptus:

    1. feb
    2. 擦伤
    3. 我们的解析是这样的:

      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),再次检查(再次)我们在两台服务器上的区域设置还有哪些其他方法可以解决此问题(在放弃并使用正则表达式替换进行黑客攻击之前)?

      感谢。

1 个答案:

答案 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();

并在解析中使用了这种文化。