sag*_*aga 3 python datetime datetime-format python-datetime
如果我有一堆带有日期和时间的数据UTC format,怎么转换为EST。
它可以确定何时-4(in summer)以及何时5(in winter)自动- 每年?谢谢
如果您有一个具有对象数据类型的 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)
您需要使用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'。
如果您只想要现有时间增量偏移的标准化小时偏移量:
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)
| 归档时间: |
|
| 查看次数: |
6541 次 |
| 最近记录: |