-753在`pd.Timestamp`中的时区是什么意思

时间:2019-05-10 16:39:35

标签: python pandas timestamp

for

输出:

tz = pytz.timezone('America/Los_Angeles')
t1 = pd.Timestamp(datetime.datetime(2019, 2, 6, 17, 0, 0, tzinfo=tz))
t1

为什么要选择-0753?

更新: 经过研究,这种方式似乎可行: 我可能做不到正确的方法,请参见下文

Timestamp('2019-02-06 17:00:00-0753', tz='America/Los_Angeles')

输出:

tz = pytz.timezone('America/Los_Angeles')
t1 = datetime.datetime(2019, 2, 6, 17, 0, 0)
t1 = tz.localize(t1)
t1 = pd.Timestamp(t1)
t1

然后将Timestamp('2019-02-06 17:00:00-0800', tz='America/Los_Angeles') 传递给tzinfo是什么样的对象?

1 个答案:

答案 0 :(得分:1)

我不知道为什么,但是这个奇怪的时区偏移来自pytz。参见下面的代码:

>>>print(datetime(2019, 5, 10, tzinfo=pytz.timezone('America/Los_Angeles')))
2019-05-10 00:00:00-07:53

>>>print(pytz.timezone('America/Los_Angeles').localize(datetime(2019, 5, 10)))
2019-05-10 00:00:00-07:00

因此,如果您尝试创建日期时间并提供tzinfo,它将创建此偏移量。

更新。

我检查了pytz docs并找到了下一个:

  

不幸的是,在许多时区中,使用标准日期时间构造函数的tzinfo参数“不起作用”与pytz一起使用。

     

...

     

它对于没有夏令时转换的时区是安全的,例如UTC。

好吧,他们告诉了我,但没有指出原因。让我们尝试找到它。在pytz来源中,我发现它们使用的IANA database版本:

OLSON_VERSION = '2019a'

在将该数据库下载并解压缩为文件“ northamerica”后,我接下来找到了:

# Zone  NAME        GMTOFF  RULES   FORMAT  [UNTIL]
Zone America/Los_Angeles -7:52:58 - LMT 1883 Nov 18 12:07:02
            -8:00   US  P%sT    1946
            -8:00   CA  P%sT    1967
            -8:00   US  P%sT

-7:52:58非常接近我们拥有的-07:53

结论:pytz中的某个地方包含一个数据库,其中包含所有已知的时区偏移量。当我们将tzinfo传递到datetime的构造函数中时,它会获得第一个已知的时区,并在本地化方法中使用它,该方法调用replace()并传递tzinfo,以某种方式获得正确的时区偏移。

要进行检查,我在另一个时区的同一文件中找到了

# Zone  NAME        GMTOFF  RULES   FORMAT  [UNTIL]
Zone America/Toronto    -5:17:32 -  LMT 1895
            -5:00   Canada  E%sT    1919
            -5:00   Toronto E%sT    1942 Feb  9  2:00s
            -5:00   Canada  E%sT    1946
            -5:00   Toronto E%sT    1974
            -5:00   Canada  E%sT

然后我启动了下一个代码:

>>>print(datetime(2019, 5, 10, tzinfo=pytz.timezone('America/Toronto')))
2019-05-10 00:00:00-05:18

如您所见,结果是相同的。它使用了-5:17:32,它是列表的第一个偏移量。