0

我有一种情况,只有在一台特定的服务器上,该DateTime.tryParse()方法的行为不正确。

该服务器安装了 en-US 文化,但后来更改为 en-AU。即使没有这个,我们也会使用“en-AU”文化信息来调用TryParse.

在除此之外的每台服务器上,字符串“1/6”都被正确解析为 2013 年 6 月 1 日。所有其他服务器可能都安装为“en-AU”,但我希望这不会改变任何东西。这台服务器解析为 2013 年 1 月 6 日。

当我们创建 the 时,CultureInfo我们使用构造函数将其强制useUserDefault为 false,这似乎会强制标准 en-AU 文化。有没有人玩过这种形式的解析 - 没有指定年份并且在某些时候在服务器上播放了非美国文化?

有问题的代码:

    UserCulture = new CultureInfo('en-AU', false)

    public DateTime? ParseDateTimeString(string s, bool useTime)
    {
        DateTime? result = null;
        DateTime dt;
        if (DateTime.TryParse(s, UserCulture, DateTimeStyles.None, out dt))
        {
            if (s.Length == 3 && s.Substring(1, 1) == "/")
            {
                Logger.logDebugForce("Parsed datetime string [" + s + "] with culture:"+UserCulture.DisplayName +" datetimeformat.shortdatepattern:"+UserCulture.DateTimeFormat.ShortDatePattern+"; got:"+dt.ToString("s"));
            }
            if (useTime && DateTimeEx.HasTimeComponent(dt))
            {
                dt = TimeZoneInfo.ConvertTimeToUtc(dt, UserTimeZone);
            }
            result = dt;
        }
        return result;
    }

    ParseDateTimeString("1/6",false); //returns June 6 2013 on all servers except one, which returns january 6 2013.

干杯

4

0 回答 0