我在python中編寫了下面的腳本來將datetime從任何給定的時區轉換爲EST。python不正確的時區轉換使用pytz
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「,但巴西的夏令時在2月20日結束,正確答案應爲'2011-02-20 09:00:00 EST-0500'。
從一些實驗中,我發現根據pytz,巴西的夏令時在2月27日結束,這是不正確的。
是否pytz包含錯誤的數據或我缺少一些東西。任何幫助或意見將不勝感激。
您應該使用內置的'int'函數將您的字符串轉換爲整數。 – sdolan
和strptime轉換爲日期。 –