如果我有一堆数据与日期& UTC format
中的时间,如何将它们转换为EST
。
它可以确定每年自动-4(in summer)
和 - 5(in winter)
的时间?
感谢
答案 0 :(得分:5)
您需要使用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)
将打印:
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
在最后两行输出中举例说明了您需要使用'US/Eastern'
而不是'EST'
的原因。
答案 1 :(得分:1)
如上所述,您可以像这样使用pandas.DataFrame.tz_convert()
:
import pandas as pd
from datetime import datetime
df = pd.read_csv("your_data_file_path.csv", index_col=False, engine='python')
df['Date'] = pd.to_datetime(df['Date'])
df['Date'] = df['Date'].dt.tz_localize('US/Eastern').dt.tz_convert('UTC')
df['Date'] = df['Date'].apply(lambda x: datetime.replace(x, tzinfo=None))
最后一行所做的是从datetime对象中删除时区信息,因此您只能操作日期和时间(不用担心,不会再次更改时区,它只是将其从时间戳中剥离了字符串)。
答案 2 :(得分:0)
如果您有一个对象数据类型为熊猫的系列,则可以先使用pd.to_datetime()
将其转换为DateTime系列。df[col] = pd.to_datetime(your_series, format = '%Y-%m-%d %H:%M:%S', errors ='coerce')
通过使用series.dt.tz
检查是否知道时区df[col].dt.tz
如果它不支持时区,则应使用series.dt.tz_localize()使其变为时区。另外,请阅读有关此函数的模棱两可和不存在的参数
df[col] = your_series[col].dt.tz_localize('UTC')
将此系列转换为所需的时区
df[col] = your_series[col].dt.tz_convert('US/Eastern')
以上方法将节省夏令时。如果要检查更多时区,可以点安装pytz和
import pytz
pytz.common_timezones
答案 3 :(得分:0)
如果您只想为现有的timedelta偏移量归一化小时:
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