【问题标题】:How to convert time from UTC to EST?如何将时间从 UTC 转换为 EST?
【发布时间】:2021-10-27 20:13:30
【问题描述】:

我有一个这样的数据框:

          dt                  |  value
2019-01-01 00:00:00 +0000 UTC |  49.0
2019-01-01 01:00:00 +0000 UTC |  39.8
2019-01-01 02:00:00 +0000 UTC |  23.4
2019-01-01 03:00:00 +0000 UTC |  45.3

此时间戳采用 UTC 时区,但我想将其转换为 EST。这是我的尝试:

dtobj = pd.to_datetime(data['dt'], format='%Y-%m-%d %H:%M:%S +0000 %Z')
dtobj = dtobj.replace(tzinfo=ZoneInfo('US/Eastern'))

但它有以下错误:

TypeError: replace() 得到了一个意外的关键字参数 'tzinfo'

我没有找到明确的答案来解释为什么会发生此错误。还有其他方法可以转换时区吗?

【问题讨论】:

标签: python timestamp timezone


【解决方案1】:

尝试使用dt.tz_convert

>>> df['dt'] = pd.to_datetime(df['dt'], format='%Y-%m-%d %H:%M:%S +0000 %Z')
>>> df['dt'] = df['dt'].dt.tz_convert('US/Eastern')
>>> df
                         dt  value
0 2018-12-31 19:00:00-05:00   49.0
1 2018-12-31 20:00:00-05:00   39.8
2 2018-12-31 21:00:00-05:00   23.4
3 2018-12-31 22:00:00-05:00   45.3
>>> 

【讨论】:

  • 我试过了,它显示 AttributeError: Can only use .dt accessor with datetimelike values
  • @Cyan 你还得用第一行
  • @Cyan 或者试试:df['dt'] = df['dt'].tz_convert('US/Eastern')
【解决方案2】:

您需要使用 pytz 模块(可从 PyPI 获得):

import pytz
from datetime import datetime

est = pytz.timezone('US/Eastern')
utc = pytz.utc
fmt = '%Y-%m-%d %H:%M:%S %Z%z'

dateTimeUtc= datetime(2016, 1, 24, 18, 0, 0, tzinfo=utc)
dateTimeUtc.astimezone(est).strftime(fmt)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-15
    • 1970-01-01
    • 2014-01-24
    • 2020-03-07
    • 2020-04-03
    • 2014-06-25
    • 1970-01-01
    • 2023-04-07
    相关资源
    最近更新 更多