我有一种情况,只有在一台特定的服务器上,该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.
干杯