如何使用Python将UTC转换为EST并自动进行夏时制?

sag*_*aga 3 python datetime datetime-format python-datetime

如果我有一堆带有日期和时间的数据UTC format,怎么转换为EST

它可以确定何时-4(in summer)以及何时5(in winter)自动- 每年?谢谢

has*_*eeb 9

如果您有一个具有对象数据类型的 pandas 系列,您可以首先使用pd.to_datetime()将其转换为 DateTime 系列

df[col] = pd.to_datetime(your_series, format = '%Y-%m-%d %H:%M:%S', errors ='coerce')
Run Code Online (Sandbox Code Playgroud)

使用series.dt.tz检查它是否支持时区

df[col].dt.tz
Run Code Online (Sandbox Code Playgroud)

如果它不支持时区,我们应该使用series.dt.tz_localize()来使其支持时区。另外,请阅读该函数的不明确和不存在的参数

df[col] = your_series[col].dt.tz_localize('UTC')
Run Code Online (Sandbox Code Playgroud)

现在通过series.dt.tz_convert()将该系列转换为所需的时区

df[col] = your_series[col].dt.tz_convert('US/Eastern')
Run Code Online (Sandbox Code Playgroud)

上述方法将考虑夏令时。如果你想检查更多时区,你可以 pip install pytz 和

import pytz
pytz.common_timezones
Run Code Online (Sandbox Code Playgroud)


the*_*orn 6

您需要使用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'

winter = datetime(2016, 1, 24, 18, 0, 0, tzinfo=utc)
summer = datetime(2016, 7, 24, 18, 0, 0, tzinfo=utc)

print winter.strftime(fmt)
print summer.strftime(fmt)

print winter.astimezone(est).strftime(fmt)
print summer.astimezone(est).strftime(fmt)
Run Code Online (Sandbox Code Playgroud)

它将打印:

2016-01-24 18:00:00 UTC+0000
2016-07-24 18:00:00 UTC+0000
2016-01-24 13:00:00 EST-0500
2016-07-24 14:00:00 EDT-0400
Run Code Online (Sandbox Code Playgroud)

输出的最后两行说明了为什么需要使用'US/Eastern'而不需要使用的原因'EST'


mor*_*ork 5

如果您只想要现有时间增量偏移的标准化小时偏移量:

from datetime import datetime
import pytz

def curr_est_offset():
    tz_est = pytz.timezone('US/Eastern')
    offset = tz_est.utcoffset(datetime.utcnow())
    offset_seconds = (offset.days * 86400) + offset.seconds
    offset_hours = offset_seconds // 3600

    return offset_hours # -4 or -5
Run Code Online (Sandbox Code Playgroud)