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.
乾杯