您好,我将本地时间转换为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的值。
对不起,这不是一个copypaste - 原始消息不是英文。
答案 0 :(得分:1)
msdn说:
的ArgumentException
dateTime.Kind是DateTimeKind.Utc,sourceTimeZone不等于TimeZoneInfo.Utc。
- 或 -
dateTime.Kind是DateTimeKind.Local,sourceTimeZone不等于TimeZoneInfo.Local。
这似乎是个问题。 DateTime.Now
返回 DateTimeKind.Local
但使用DateTime.SpecifyKind()对我有用:
dt1 = DateTime.SpecifyKind( dt, DateTimeKind.Unspecified );
TimeZoneInfo.ConvertTimeToUtc( dt1, tz );
答案 1 :(得分:1)
TimeZoneInfo.Equals
方法不仅在Id上进行比较:它还测试两个时区具有相同的调整规则(TimeZoneInfo.HasSameRules
) - 您可以使用Reflector看到这一点。
我怀疑本地时区实际上是使用夏令时,而TimeZoneInfo.FindSystemTimeZoneById("Russian Standard Time")
正在返回没有夏令时的时区。
您应该可以使用调试器轻松检查。