C# DateTimeFormat.缩写月名在月底添加一个点';姓名

C# DateTimeFormat.缩写月名在月底添加一个点';姓名,c#,cultureinfo,C#,Cultureinfo,昨晚,我们将web服务层从物理Windows 2008 r2迁移到虚拟Windows 2012 我们的日志中有大量关于DateTime无效格式的事件,奇怪的是,我们仔细检查了我们的区域设置 长话短说: CultureInfo.GetCultureInfo("es-MX").DateTimeFormat.AbbreviatedMonthNames 输出(使用LinqPad5): 埃尼 二月 三月 在我们新的2012年环境中,而在2008年环境中: 烯 二月 玷污 我们的解析是这样的: DateT

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

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

长话短说:

CultureInfo.GetCultureInfo("es-MX").DateTimeFormat.AbbreviatedMonthNames
输出(使用LinqPad5):

  • 埃尼
  • 二月
  • 三月
  • 在我们新的2012年环境中,而在2008年环境中:

  • 二月
  • 玷污
  • 我们的解析是这样的:

    DateTime.Parse("18 ene 16",CultureInfo.GetCultureInfo("es-MX"))
    
    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();
    
    虽然它创造了奇迹,但现在它抛出了

    FormatException:
    该字符串未被识别为有效的日期时间。有一个从索引3开始的未知单词。

    DateTime.Parse("18 ene. 16",CultureInfo.GetCultureInfo("es-MX"))
    
    有效,但不是我们几个客户的预期输入

    在使用相同的运行时版本(4.0.30319.42000)时,再次(再次)检查两台服务器上的区域设置我还可以寻找什么来修复此问题(在放弃并使用正则表达式替换进行黑客攻击之前)


    谢谢。

    很遗憾,我在配置中找不到任何正确的方向

    以这样一个恶劣的黑客行为结束:

    DateTime.Parse("18 ene 16",CultureInfo.GetCultureInfo("es-MX"))
    
    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();
    

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

    很多年前可能有人更改了旧服务器的配置。你得在新的那台上再做一次。使用控制面板>区域。您确定运行时版本吗?2008 R2采用3.5.1框架交付,该框架输出的缩写名称不带点,而2012 R2采用4.5框架交付,该框架输出的缩写名称带点。您可以尝试将框架版本(如果可能的话)更改为3.5?@HansPassant:是的,我们正在再次检查两个配置,如果发现什么,我会告诉您。@Uwe:我用linqpad脚本测试了它,并在两台服务器上都给了我输出,这两个应用程序池都配置为.NET Framework v4.0,但将新的应用程序池降级为3.5就可以了!我会尽力让你知道的!谢谢大家!