给定时区将日期时间转换为Utc
问题描述:
我不想在每次有夏令时更改时都不得不更改配置。这是我目前正在做的,因为它使用“标准”时间,所以不起作用。给定时区将日期时间转换为Utc
TimeZoneInfo timeZone = TimeZoneInfo.FindSystemTimeZoneById("US Eastern Standard Time")
TimeZoneInfo.ConvertTimeToUtc(dateTime, timeZone); // This doesn't take into account that it's daylight savings...
是否有一种适合所有的解决方案。因此,我可以给它一个日期时间和地点,如“美国东海岸”,它给我在Utc的时间?
答
我已经完成了之前通过使用映射表在数据库中存储时区标识。即包含结果的表格TimeZone.GetSystemTimeZones()
你实际上并不需要使用TimeZoneInfo。但是:您可以使用TimeZoneInfo.ConvertTimeBySystemTimeZoneId()
的过载之一进行转换。此方法有一些重载值,取值为DateTime
,有些取值为DateTimeOffset
(因为它们指定了明确的时间点,所以这是更可取的)。
例如
TimeZoneInfo.ConvertTimeBySystemTimeZoneId(DateTime.Now, "New Zealand Standard Time", "UTC")
使用该系统时区ID,而不是一个偏移量存储在数据库中的真正的好处是夏令时为您TimeZoneInfo.ConvertTimeBySystemTimeZoneId
自动处理。
此MSDN也可能证明对您有所帮助>
+0
之后输入7.50am的时间应该在11.50am,但是在12.50pm。 – Cheetah 2013-03-14 11:52:00
问题是什么?你能解释一下更详细的问题吗?什么意思“不起作用”? – 2013-03-14 11:26:09
由于夏令时,现在只有1个小时了。 – Cheetah 2013-03-14 11:28:03
我无法重现问题 - 你确定dateTime设置正确吗? – RoadieRich 2013-03-14 11:40:49