您好,将本地时间转换为UTC时,我有一个例外。我运行我的应用程序
在设置了“俄罗斯标准时间”的Windows上。

public Convert()
{
            DateTime dt = DateTime.Now;
            DateTime dt1 = DateTime.Now;

           // this converstion works
            TimeZoneInfo.ConvertTimeToUtc(dt, TimeZoneInfo.Local);

            // now let's get local timezone by id
            TimeZoneInfo tz = TimeZoneInfo.FindSystemTimeZoneById("Russian Standard Time");

            if (TimeZoneInfo.Local.Id == tz.Id)
            {
                // this is just to make sure we have the same timezones
            }

// this conversion does not work
// throws exception System.ArgumentException
TimeZoneInfo.ConvertTimeToUtc(dt1, tz);

}


更新

异常文字说-由于datetime的Kind属性,无法完成掩盖
是错的。例如,如果Kind为Local,则时区必须具有TimeZoneInfo.Local的值。

抱歉,这不是复制粘贴-原始消息不是英语。

最佳答案

TimeZoneInfo.Equals方法不仅会在ID上进行比较:还会测试两个时区具有相同的调整规则(TimeZoneInfo.HasSameRules)-您可以使用Reflector看到它。

我怀疑本地时区实际上是在使用夏令时,而TimeZoneInfo.FindSystemTimeZoneById("Russian Standard Time")返回的时区却没有夏令时。

您应该能够使用调试器轻松地检查这一点。

关于c# - ConvertTimeToUtc上的异常,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3280190/

10-12 01:07