为什么Pandas tz_convert无法将2038年的UTC转换为欧洲/伦敦时区?

2024-10-03 19:22:44 发布

您现在位置:Python中文网/ 问答频道 /正文

熊猫DatetimeIndex.tz_转换无法将伦敦时区(UTC)的2038时区数据正确转换为欧洲时区。这个转换在2037年有效,因此这个bug似乎与Y2K38 bug有关(尽管奇怪的是,我在64位运行Python,Y2K38错误似乎与32位有关)

为2037年和2038年6月的一些随机日期创建UTC日期时间索引:

s_2037 = pd.date_range(start='13/06/2037', 
                   end='14/06/2037',freq='H',tz='UTC')[0:3]
s_2037
DatetimeIndex(['2037-06-13 00:00:00+00:00', '2037-06-13 01:00:00+00:00',
               '2037-06-13 02:00:00+00:00'],
              dtype='datetime64[ns, UTC]', freq='H')

s_2038 = pd.date_range(start='13/06/2038',end='14/06/2038',freq='H',tz='UTC')[0:3]
s_2038
DatetimeIndex(['2038-06-13 00:00:00+00:00', '2038-06-13 01:00:00+00:00',
               '2038-06-13 02:00:00+00:00'],
              dtype='datetime64[ns, UTC]', freq='H')

将其转换为2037年的欧洲/伦敦时区(即伦敦时钟时间)。我们看到夏令时(DST)的影响:所有时间都正确地向前移动了一个小时。在

^{pr2}$

但2038年并非如此:时区标签更新了,但时间没有适当地改变!在

s_2038.tz_convert('Europe/London')
DatetimeIndex(['2038-06-13 00:00:00+00:00', '2038-06-13 01:00:00+00:00',
               '2038-06-13 02:00:00+00:00'],
              dtype='datetime64[ns, Europe/London]', freq='H')

Tags: date时间rangestartbugtzendpd