我在将时间从伦敦(UTC / UTC + 1)转换为美国东部时间(UTC-5 / UTC-4)时遇到问题。
代码在UTC + 1阶段在伦敦机器上运行,
TimeZoneInfo.ConvertTimeFromUtc(DateTime.Now.ToUniversalTime(), TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time"));
这将从UTC + 1到UTC-7正确转换14:25:00到06:25:00
但是,如果时区是US Eastern
TimeZoneInfo.ConvertTimeFromUtc(DateTime.Now.ToUniversalTime(), TimeZoneInfo.FindSystemTimeZoneById("US Eastern Standard Time"));
这将错误地将14:25:00转换为08:25:00从UTC + 1转换为UTC-4
此外,
TimeZoneInfo.FindSystemTimeZoneById("US Eastern Standard Time").SupportsDaylightSavingTime
在
时返回falseTimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time").SupportsDaylightSavingTime
返回true。
这是在.NET 3.5下运行的。有什么想法吗?
答案 0 :(得分:0)
这看起来像是一个错误,要么在运行.NET的平台上出现错误的时区信息;或者在.NET本身。在我看来,你应该在东部标准时间获得true
。
如果您使用tz info数据库,我很确定您会得到更少的模糊结果。退房:http://www.codeproject.com/KB/dotnet/Using_time_zones_in_NET.aspx。
在此处了解有关开放时区数据库的更多信息:http://en.wikipedia.org/wiki/Tz_database
进一步的想法: 很难说这里的错误是什么。以东部标准时间为例。根据定义,东部沿海的冬季时间,夏季东部标准时间并不存在。突然之间,该地区开始使用“东部夏令时”。
中欧在“中欧时代”和“中欧标准时代”之间交替出现同样的情况。围绕时区命运的惯例确实令人困惑,而且很多时候都很模糊。我只能重复一遍,如果你能为你的平台和编程语言找到一个可靠的tz数据库API:使用它。