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

时间:2019-02-18 14:26:28

标签: python pandas datetime

Pandas DatetimeIndex.tz_convert()无法在2038年正确地将UTC时区时间数据转换为欧洲/伦敦时区。该转换在2037年确实有效,因此此错误似乎与Y2K38 bug有关(尽管很奇怪我在64位元上执行Python,而Y2K38错误似乎与32位元连结)

在6月的某个随机天中创建UTC的DatetimeIndex,分别适用于2037年和2038年:

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)的影响:所有时间都正确地向前移动了一个小时。

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

但对于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')

0 个答案:

没有答案