给定时区将 DateTime 转换为 Utc

Che*_*tah 0 .net c# datetime utc

我不想每次有夏令时更改时都必须更改配置。这就是我目前正在做的,因为它使用“标准”时间而不起作用。

TimeZoneInfo timeZone = TimeZoneInfo.FindSystemTimeZoneById("US Eastern Standard Time")
TimeZoneInfo.ConvertTimeToUtc(dateTime, timeZone); // This doesn't take into account that it's daylight savings...
Run Code Online (Sandbox Code Playgroud)

是否有一种一刀切的解决方案。所以我可以给它一个日期时间和一个像“美国东海岸”这样的位置,它给我 Utc 的时间?

Fre*_*cer 5

我以前通过使用映射表将时区 id 存储在数据库中来完成它。即包含结果的表TimeZone.GetSystemTimeZones()

您实际上并不需要使用 TimeZoneInfo。FindSystemTimeZoneById()不过:您可以使用TimeZoneInfo.ConvertTimeBySystemTimeZoneId(). 此方法有一些采用DateTime值的重载,以及一些采用DateTimeOffset值的重载(由于它们指定了明确的时间点,因此更可取)。

例如

TimeZoneInfo.ConvertTimeBySystemTimeZoneId(DateTime.Now, "New Zealand Standard Time", "UTC")
Run Code Online (Sandbox Code Playgroud)

使用系统时区 ID 而不是存储在数据库中的偏移量的真正好处是夏令时由 自动为您处理TimeZoneInfo.ConvertTimeBySystemTimeZoneId

这个 msdn 也可能对你有帮助>

http://msdn.microsoft.com/en-us/library/bb382058.aspx