我在 python 中编写了以下脚本,将日期时间从任何给定的时区转换为 EST。
from datetime import datetime, timedelta
from pytz import timezone
import pytz
utc = pytz.utc
# Converts char representation of int to numeric representation '121'->121, '-1729'->-1729
def toInt(ch):
ret = 0
minus = False
if ch[0] == '-':
ch = ch[1:]
minus = True
for c in ch:
ret = ret*10 + ord(c) - 48
if minus:
ret *= -1
return ret
# Converts given datetime in tzone to EST. dt = 'yyyymmdd' and tm = 'hh:mm:ss'
def convert2EST(dt, tm, tzone):
y = toInt(dt[0:4])
m = toInt(dt[4:6])
d = toInt(dt[6:8])
hh = toInt(tm[0:2])
mm = toInt(tm[3:5])
ss = toInt(tm[6:8])
# EST timezone and given timezone
est_tz = timezone('US/Eastern')
given_tz = timezone(tzone)
fmt = '%Y-%m-%d %H:%M:%S %Z%z'
# Initialize given datetime and convert it to local/given timezone
local = datetime(y, m, d, hh, mm, ss)
local_dt = given_tz.localize(local)
est_dt = est_tz.normalize(local_dt.astimezone(est_tz))
dt = est_dt.strftime(fmt)
print dt
return dt
当我用 convert2EST('20110220', '11:00:00', 'America/Sao_Paulo') 调用此方法时
输出为“2011-02-20 08:00:00 EST-0500”,但巴西的 DST 于 2 月 20 日结束,正确答案应为“2011-02-20 09:00:00 EST-0500”。
通过一些实验,我发现根据 pytz 巴西的 DST 于 2 月 27 日结束,这是不正确的。
pytz 是否包含错误的数据或者我遗漏了什么。任何帮助或意见将不胜感激。