zyx*_*xue 3 python timestamp pandas
tz = pytz.timezone('America/Los_Angeles')
t1 = pd.Timestamp(datetime.datetime(2019, 2, 6, 17, 0, 0, tzinfo=tz))
t1
Run Code Online (Sandbox Code Playgroud)
输出:
Timestamp('2019-02-06 17:00:00-0753', tz='America/Los_Angeles')
Run Code Online (Sandbox Code Playgroud)
为什么是-0753?
更新:经过一些研究,这种方式似乎有效:我可能没有以正确的方式做,见下文
tz = pytz.timezone('America/Los_Angeles')
t1 = datetime.datetime(2019, 2, 6, 17, 0, 0)
t1 = tz.localize(t1)
t1 = pd.Timestamp(t1)
t1
Run Code Online (Sandbox Code Playgroud)
输出:
Timestamp('2019-02-06 17:00:00-0800', tz='America/Los_Angeles')
Run Code Online (Sandbox Code Playgroud)
tzinfo传递给 then 时应该是什么样的对象datetime.datetime?
我不知道为什么,但这个奇怪的时区偏移来自 pytz。参见下面的代码:
\n>>>print(datetime(2019, 5, 10, tzinfo=pytz.timezone(\'America/Los_Angeles\')))\n2019-05-10 00:00:00-07:53\n\n>>>print(pytz.timezone(\'America/Los_Angeles\').localize(datetime(2019, 5, 10)))\n2019-05-10 00:00:00-07:00\nRun Code Online (Sandbox Code Playgroud)\n因此,如果您尝试创建 datetime 并提供tzinfo,它将创建此偏移量。
更新。
\n我检查了 pytz文档并发现了下一个:
\n\n\n不幸的是,使用标准日期时间构造函数 \xe2\x80\x98\xe2\x80\x99 的 tzinfo 参数对于许多时区的 pytz 不起作用\xe2\x80\x99\xe2\x80\x99 。
\n...
\n不过,对于没有夏令时转换的时区(例如 UTC)来说是安全的。
\n
好吧,他们说了,但没有指出原因。让我们试着找到它。在 pytz 来源中,我找到了他们使用的IANA 数据库版本:
\nOLSON_VERSION = \'2019a\'\nRun Code Online (Sandbox Code Playgroud)\n在文件“northamerica”中下载并解压该数据库后,我发现了以下内容:
\n# Zone NAME GMTOFF RULES FORMAT [UNTIL]\nZone America/Los_Angeles -7:52:58 - LMT 1883 Nov 18 12:07:02\n -8:00 US P%sT 1946\n -8:00 CA P%sT 1967\n -8:00 US P%sT\nRun Code Online (Sandbox Code Playgroud)\n-7:52:58-07:53与我们已经非常接近了。
结论: pytz 中的某个地方有一个数据库,其中包含所有已知的时区偏移量。当我们将 tzinfo 传递到 datetime 的构造函数时,它会获取第一个已知时区,并在 localize 方法(调用Replace()并传递 tzinfo )时使用它,以某种方式获取正确的时区偏移量。
\n为了检查它,我在同一个文件中找到了另一个时区:
\n# Zone NAME GMTOFF RULES FORMAT [UNTIL]\nZone America/Toronto -5:17:32 - LMT 1895\n -5:00 Canada E%sT 1919\n -5:00 Toronto E%sT 1942 Feb 9 2:00s\n -5:00 Canada E%sT 1946\n -5:00 Toronto E%sT 1974\n -5:00 Canada E%sT\nRun Code Online (Sandbox Code Playgroud)\n然后我启动了下一个代码:
\n>>>print(datetime(2019, 5, 10, tzinfo=pytz.timezone(\'America/Toronto\')))\n2019-05-10 00:00:00-05:18\nRun Code Online (Sandbox Code Playgroud)\n如您所见,结果是相同的。它使用了-5:17:32,它是列表中的第一个偏移量。
| 归档时间: |
|
| 查看次数: |
357 次 |
| 最近记录: |