【问题标题】:Pandas timestamp and python datetime interpret timezone differentlyPandas 时间戳和 python 日期时间对时区的解释不同
【发布时间】:2018-04-11 14:02:58
【问题描述】:

我不明白为什么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

【问题讨论】:

  • b-a 返回什么?
  • b-a 返回 1:40:00

标签: pandas datetime


【解决方案1】:

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

【讨论】:

  • 哇。谢谢,在python中学到了一些关于时间和时区的新知识。 +1
【解决方案2】:

如果你看 a 和 b,

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

真的

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

CEST 欧洲中部夏令时间

对比

LMT 当地时间

【讨论】:

  • 这里的CEST好像和LMT时间一样,但是pandas和python对同一个时区的解释不同?
猜你喜欢
  • 2018-06-20
  • 1970-01-01
  • 1970-01-01
  • 2019-01-28
  • 1970-01-01
  • 2020-06-27
  • 2016-03-21
  • 1970-01-01
  • 2018-02-08
相关资源
最近更新 更多