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

Python pandas.to_datetime()如何从本地时区转换为UTC unix时间戳?,python,pandas,timezone,Python,Pandas,Timezone,我有一个“YYYY-MM-DD”格式的日期值列表。这些值位于本地PC的时区(我不知道)。这些值作为一个系列加载到Pandas数据帧中,我想将它们转换为UTC时间戳 如果我使用非常简单的代码: ts=pd.to_datetime(s,format=“%Y-%m-%d”) 打印(ts[0]) 打印(int(ts[0].timestamp()) 打印(ts[0].strftime(“%d.%m.%Y%Z”)) 它给了我输出: 2021-01-01 00:00:00 1609459200 --&g

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

  • 如果我使用非常简单的代码:
  • ts=pd.to_datetime(s,format=“%Y-%m-%d”)
    打印(ts[0])
    打印(int(ts[0].timestamp())
    打印(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
    
    i、 e.它将源字符串作为UTC,并将其置于UTC中。但我的源字符串是localtime,输出不正确

  • 然后我找到了一个选项,可以通过以下方式在源字符串中提供时区信息:
  • 它给了我我真正需要的结果:

    2021-01-01 00:00:00+03:00
    1609448400 --> this is correct 'Thursday, December 31, 2020 21:00:00 UTC'
    01.01.2021 MSK
    
    但时区名称在这里是硬编码的

  • 因此,我需要从我的代码工作的PC上获取本地时区名称。我试着这样做:
  • 它给了我输出
    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
      ,而不是short
      MSK
    • 或者使
      pandas.to_datetime()
      格式选项
      %Z
      识别时区名称的缩写形式
      MSK
    • 或者在将源字符串导入pandas之前对其进行预处理(最不理想的路径,所以我还没有研究它)
    我有点执着于选择前进的道路。您能给我一些建议吗?哪种方法能给我更好的代码?

    我想您可以使用:


    伟大的很有效,非常感谢!
    from datetime import datetime
    from dateutil import tz
    print(datetime.now(tz.tzlocal()).tzname())
    
    s = pd.Series(['2021-01-01 MSK', '2021-01-02 MSK'])
    ts = pd.to_datetime(s, format="%Y-%m-%d %Z")
    
    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())