【问题标题】:TimeZone.IsInvalidTime not catching invalid time caused by dst for Egypt in 2010TimeZone.IsInvalidTime 未捕获 2010 年埃及的 dst 导致的无效时间
【发布时间】:2013-04-23 11:17:28
【问题描述】:

这是一个极端情况。

我正在努力解决将无效的本地时间转换为 UTC 的问题。在本地时区中,由于夏令时 (dst),某些时间段无法转换为 UTC。给定正确的时区,TimeZone.IsInvalidTime() 可用于识别此类数据时间值。

在埃及,DST 在 2010 年每年更改 4 次(由于斋月)。 IsInvalidTime() 似乎没有检测到第二次这样的转换。

编辑 TimeZoneInfo.ConvertTime() 是我用来将其实际转换为 UTC 的,它将这些值转换为 UTC。一个错误的转换,但转换都是一样的。

有人遇到过这个,有什么建议可以覆盖这个吗?

【问题讨论】:

标签: c# timezone dst


【解决方案1】:

Windows 时区数据库在准确反映时区规则的历史变化方面是出了名的糟糕。请改用 IANA/Olson 时区数据库。有关不同数据库的更多信息,请参阅TimeZone tag wiki

对于.Net,最好的解决方案是使用NodaTime。它完全实现了 IANA/Olson 数据库。您将使用Africa/Cairo 时区,它准确地反映了所有的历史变化。

【讨论】:

  • 这里有问题的不仅仅是事物的历史方面 - 我相信 Windows 时区表示每年根本不能支持超过 2 次转换。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-04
  • 1970-01-01
  • 1970-01-01
  • 2018-06-20
  • 1970-01-01
相关资源
最近更新 更多