2013-04-23 61 views
2

这是一个特殊情况。TimeZone.IsInvalidTime无法捕捉2010年由埃及dst导致的无效时间

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

在埃及,DST在2010年发生了4次变化(由于斋月)。第二个这样的转换似乎没有被IsInvalidTime()检测到。

编辑 的TimeZoneInfo.ConvertTime(),这是我用实际将其转换为UTC的东西,这些值转换为UTC。转换错误,但转换完全相同。

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

+1

看看这里http://support.microsoft.com/kb/2297272并不知道如果你需要[此修补程序](http://support.microsoft.com/kb/2543367) – V4Vendetta 2013-04-23 11:23:43

+0

它似乎修复日历和展望,但不提供图书馆的帮助。 – Nanda 2013-04-23 11:48:53

回答

2

Windows时区数据库以准确地反映时区规则的历史更改而臭名昭着。改用IANA/Olson时区数据库。有关不同数据库的更多信息,请参见TimeZone tag wiki

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

+1

这里不仅仅是问题的历史方面 - 我相信Windows时区表示每年都不能支持超过2次转换。 – 2013-04-24 16:38:02