在c#中将EST转换为IST会产生错误

本文关键字:错误 IST 中将 EST 转换 | 更新日期: 2023-09-27 18:01:40

我试图将EST(东部标准时间)转换为IST(印度标准时间),但转换显示不正确的结果。有人能帮我吗?我在网上搜索了一下,发现使用野田时间可以解决这个问题。但是我想用传统的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.

在c#中将EST转换为IST会产生错误

几点:

  • TimeZoneInfo标识符"Eastern Standard Time"指北美东部时区,包括东部标准时间和东部夏令时。EST是UTC-5, EDT是UTC-4。一般来说,您不应该从这些标识符的名称中推断太多。在时区标签wiki中查看更多示例。

  • TimeZoneInfo.ConvertTime方法将使用适合所提供日期和时间的偏移量,并正确地考虑到夏令时规则。

  • 来自Windows的底层时区数据不返回到1899年。实际上没有数据来源可以保证那个时期的历史日期。即使是与野田时间一起使用的IANA时区数据库也只能做出有根据的猜测。

  • Windows将只使用它拥有的最早的数据,对于这个区域,它使用1986年到2007年生效的夏令时规则。这些都不是当前的规则,所以使用现代年份会更有意义,例如DateTime.Today.Year

  • 即使您提供现代年份,正确的转换时间确实是12月日期的10:00。如果你想要9点,试着在夏天约会。