Я написал следующий скрипт на 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', 'Америка/Сан-Паулу')
вывод: «2011-02-20 08:00:00 EST-0500», но летнее время в Бразилии закончилось 20 февраля, и правильный ответ должен быть «2011-02-20 09:00:00 EST-0500».
Из некоторых экспериментов я понял, что, согласно pytz, переход на летнее время в Бразилии заканчивается 27 февраля, что неверно.
Содержит ли pytz неверные данные или я что-то упускаю. Любая помощь или комментарии будут высоко оценены.
int
для преобразования ваших строк в целые числа. - person Sam Dolan   schedule 23.02.2011