gpt4 book ai didi

python - pandas.to_datetime() 如何从本地时区转换为 UTC unix 时间戳?

转载 作者:行者123 更新时间:2023-12-05 06:06:16 26 4
gpt4 key购买 nike

我有一个日期值列表,格式为“YYYY-MM-DD”。这些值位于本地 PC 的时区(我不知道)。这些值作为系列加载到 Pandas 数据框中,我想将它们转换为 UTC 时间戳。

  1. 如果我使用非常简单的代码:
ts = pd.to_datetime(s, format="%Y-%m-%d")
print(ts[0])
print(int(ts[0].timestamp()))
print(ts[0].strftime("%d.%m.%Y %Z"))

它给了我输出:

2021-01-01 00:00:00
1609459200 --> this is 'Friday, January 1, 2021 0:00:00 UTC'
01.01.2021

即它将源字符串作为 UTC 并将其放入 UTC。但是我的源字符串是本地时间,输出不正确。

  1. 然后我找到了一个以这种方式在源字符串中提供时区信息的选项:
s = pd.Series(['2021-01-01 Europe/Moscow', '2021-01-02 Europe/Moscow'])
ts = pd.to_datetime(s, format="%Y-%m-%d %Z")
print(ts[0])
print(int(ts[0].timestamp()))
print(ts[0].strftime("%d.%m.%Y %Z"))

它给了我真正需要的结果:

2021-01-01 00:00:00+03:00
1609448400 --> this is correct 'Thursday, December 31, 2020 21:00:00 UTC'
01.01.2021 MSK

但时区名称在这里是硬编码的。

  1. 因此,我需要从运行我的代码的 PC 上获取本地时区名称。我试过这种方式:
from datetime import datetime
from dateutil import tz
print(datetime.now(tz.tzlocal()).tzname())

它给我输出 MSK。但是这个输出的问题 - 当我尝试将它用于 Pandas.to_datetime - 它给了我一个错误:

s = pd.Series(['2021-01-01 MSK', '2021-01-02 MSK'])
ts = pd.to_datetime(s, format="%Y-%m-%d %Z")

ValueError:时间数据“2021-01-01 MSK”与格式“%Y-%m-%d %Z”不匹配(匹配)

因此,我看到了以下前进方向:

  • 要么以某种方式从我的 python 代码中获取完整时区名称 Europe/Moscow 而不是短 MSK
  • 或使 pandas.to_datetime() 格式选项 %Z 识别时区名称的缩写形式 MSK,
  • 或者在将源字符串导入 pandas 之前以某种方式对其进行预处理(最不理想的路径,所以我还没有研究它)。

我有点难以选择这里的前进方式。你能给我建议哪种方式可以给我更好的代码吗?

最佳答案

我想你可以使用 Series.dt.tz_localize :

from dateutil import tz

s = pd.Series(['2021-01-01', '2021-01-02'])
ts = pd.to_datetime(s, format="%Y-%m-%d").dt.tz_localize(tz.tzlocal())

关于python - pandas.to_datetime() 如何从本地时区转换为 UTC unix 时间戳?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65823488/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com