【发布时间】:2021-03-27 08:39:22
【问题描述】:
我收到此错误:
提供的 DateTime 表示无效时间。例如,当 时钟向前调整,在被跳过的时间段内的任何时间 无效
当我尝试将时间 2020-03-29 02:30 从东欧时间 (GMT+2) 转换为 UTC 时间时。
根据this site,芬兰的时钟应该在 03:00 发生变化,这意味着时间 02:30 应该可以转换为 UTC。
但是当我运行下面的代码时,抛出了一个异常。
var timezoneMap = TimeZoneInfo.GetSystemTimeZones().ToDictionary(x => x.Id, x => x);
var timezoneInfo = timezoneMap["E. Europe Standard Time"];
var localTime1 = DateTime.SpecifyKind(new DateTime(2020, 12, 15, 0, 0, 0), DateTimeKind.Unspecified);
var localTime2 = DateTime.SpecifyKind(new DateTime(2020, 3, 29, 2, 30, 0), DateTimeKind.Unspecified);
var utc1 = TimeZoneInfo.ConvertTimeToUtc(localTime1, timezoneInfo); // 2020-12-14 22:00 correct
var utc2 = TimeZoneInfo.ConvertTimeToUtc(localTime2, timezoneInfo); // throws exception
第二次转换有什么问题,为什么会出现异常?
【问题讨论】:
-
那些是未知的,不是本地的 DateTime 值。无论如何,如果您关心偏移量,您应该使用 DateTimeOffset
标签: c#