您好,将本地时间转换为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/