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 的时间?
我以前通过使用映射表将时区 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