2013-03-14 151 views
0

我不想在每次有夏令时更改时都不得不更改配置。这是我目前正在做的,因为它使用“标准”时间,所以不起作用。给定时区将日期时间转换为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的时间?

+0

问题是什么?你能解释一下更详细的问题吗?什么意思“不起作用”? – 2013-03-14 11:26:09

+0

由于夏令时,现在只有1个小时了。 – Cheetah 2013-03-14 11:28:03

+0

我无法重现问题 - 你确定dateTime设置正确吗? – RoadieRich 2013-03-14 11:40:49

回答

3

我已经完成了之前通过使用映射表在数据库中存储时区标识。即包含结果的表格TimeZone.GetSystemTimeZones()

你实际上并不需要使用TimeZoneInfo。但是:您可以使用TimeZoneInfo.ConvertTimeBySystemTimeZoneId()的过载之一进行转换。此方法有一些重载值,取值为DateTime,有些取值为DateTimeOffset(因为它们指定了明确的时间点,所以这是更可取的)。

例如

TimeZoneInfo.ConvertTimeBySystemTimeZoneId(DateTime.Now, "New Zealand Standard Time", "UTC") 

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

此MSDN也可能证明对您有所帮助>

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

+0

之后输入7.50am的时间应该在11.50am,但是在12.50pm。 – Cheetah 2013-03-14 11:52:00

相关问题