0

1 つの特定のサーバーでのみDateTime.tryParse()メソッドが正しく動作しない状況があります。

サーバーは en-US カルチャでインストールされましたが、その後 en-AU に変更されました。それがなくても、呼び出しで「en-AU」カルチャ情報を使用していますTryParse.

文字列「1/6」は、このサーバー以外のすべてのサーバーで 2013 年 6 月 1 日を意味するように正しく解析されます。他のすべてのサーバーはおそらく「en-AU」としてインストールされていましたが、何も変わらないことを願っています。この 1 つのサーバーは、2013 年 1 月 6 日を意味するように解析されます。

the を作成するときはCultureInfo、コンストラクタを使用して theuseUserDefaultを 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