Pandas timestamp和python datetime以不同的方式解释时区

时间:2018-04-11 14:02:59

标签: pandas datetime

我不明白为什么ab不一样:

import pandas as pd
from datetime import datetime
import pytz

here = pytz.timezone('Europe/Amsterdam')

a = pd.Timestamp('2018-4-9', tz=here).to_pydatetime() 
# datetime.datetime(2018, 4, 9, 0, 0, tzinfo=<DstTzInfo'Europe/Amsterdam' CEST+2:00:00 DST>)
b = datetime(2018, 4, 9, 0, tzinfo=here)
# datetime.datetime(2018, 4, 9, 0, 0, tzinfo=<DstTzInfo 'Europe/Amsterdam' LMT+0:20:00 STD>)

print(b-a)
# returns 01:40:00

2 个答案:

答案 0 :(得分:3)

从这stackoverflow post我了解到tzinfo对某些时区不起作用,这可能是导致错误结果的原因。 pytz doc

  

不幸的是使用标准日期时间的tzinfo参数   对于许多时区,构造函数''与pytz不起作用'。

解决方案是使用localizeastimezone

import pandas as pd
from datetime import datetime
import pytz

here = pytz.timezone('Europe/Amsterdam')

a = pd.Timestamp('2018-4-9', tz=here).to_pydatetime() 
# datetime.datetime(2018, 4, 9, 0, 0, tzinfo=<DstTzInfo'Europe/Amsterdam' CEST+2:00:00 DST>)
b = here.localize(datetime(2018, 4, 9))
# datetime.datetime(2018, 4, 9, 0, 0, tzinfo=<DstTzInfo 'Europe/Amsterdam' CEST+2:00:00 DST>)

print(b-a)
# returns 00:00:00

答案 1 :(得分:1)

如果你看a和b,

a
datetime.datetime(2018, 4, 9, 0, 0, tzinfo=<DstTzInfo 'Europe/Amsterdam' CEST+2:00:00 DST>)

VERUS

b
datetime.datetime(2018, 4, 9, 0, 0, tzinfo=<DstTzInfo 'Europe/Amsterdam' LMT+0:20:00 STD>)

CEST欧洲中部夏令时

vs

LMT本地平均时间