我正在尝试将EST(东部标准时间)转换为IST(印度标准时间),但转换显示的结果不正确。 任何人都可以帮我吗? 我在网上搜索,发现使用Noda时间我们可以解决这个问题。 但我想用传统的DateTime类解决它。
这是我的代码及其输出:
DateTime time= new DateTime(1899,12,30, 23, 30 ,0); //some random date and 11:30 PM in EST
TimeZoneInfo estZone = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time"); // Eastern Time Zone
TimeZoneInfo istZone = TimeZoneInfo.FindSystemTimeZoneById("India Standard Time"); // Indian Time Zone
DateTime localTime = TimeZoneInfo.ConvertTime(time, estZone, istZone); // result is 10:00 am while it should be 09:00 am.
答案 0 :(得分:1)
一些事情:
TimeZoneInfo
标识符"Eastern Standard Time"
是指北美东部时区,涵盖 东部标准时间和东部夏令时。 EST是UTC-5,而EDT是UTC-4。通常,您不应该从这些标识符的名称中推断太多。请参阅the timezone tag wiki中的更多示例。
TimeZoneInfo.ConvertTime
方法将使用适合所提供日期和时间的偏移量,并正确考虑daylight saving time规则。
来自Windows的基础时区数据不会回溯到1899年。实际上没有数据来源可以保证该时间段的历史日期。即使与the IANA time zone database一起使用的Noda Time也会进行有根据的猜测。请参阅History of DST in the United States。
Windows将使用它拥有的最早的数据,该区域使用1986年至2007年生效的夏令时规则。这些规则不是当前的规则,因此使用它会更有意义现代的一年,如DateTime.Today.Year
。
即使你提供了一个现代的年份,12月份的正确转换时间确实是10点。如果您想要9:00,请在夏季尝试约会。