我在把时间从伦敦(UTC/UTC+1)转换为美国东部时间(UTC-5/UTC-4)时遇到问题。
在伦敦机器上运行UTC+1阶段的代码,
TimeZoneInfo.ConvertTimeFromUtc(DateTime.Now.ToUniversalTime(), TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time"));这将正确地将14:25:00到06:25:00从UTC+1转换为UTC-7
但是,如果时区是美国东部
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返回false
TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time").SupportsDaylightSavingTime返回真。
这是在.NET 3.5下运行的。有什么想法吗?
发布于 2011-07-09 21:05:10
它看起来确实是一个bug,要么是运行.NET平台上的错误时区信息,要么是.NET本身的错误信息。在我看来,您应该获得东部标准时间的true。
如果您使用tz信息数据库,我很肯定您会得到较少的模糊结果。退房:http://www.codeproject.com/KB/dotnet/Using_time_zones_in_NET.aspx。
并在这里了解有关开放时区数据库的更多信息:http://en.wikipedia.org/wiki/Tz_database
进一步的思考:很难说出这里的bug是什么。以东部标准时间为例。它从定义上说是东部沿海的冬季时间,在夏季东部标准时间并不真正存在。突然,该地区开始使用“东部夏令时间”。
中欧也是如此,它介于“中欧时间”和“中欧标准时间”之间。围绕时区名称的约定确实令人困惑,而且很多时候也是模棱两可。我只能重复一遍,如果您能够为您的平台和编程语言找到可靠的tz数据库API :使用它。
https://stackoverflow.com/questions/6572197
复制相似问题