1. 程式人生 > >python處理datetime型別的時區轉換

python處理datetime型別的時區轉換

需求:資料庫庫中的資料是按照UTC時間進行儲存 所以取出來顯示給使用者 需要處理一下時區

關於pytz包:http://pytz.sourceforge.net/

>>>import pytz, datetime
>>>tz0 = pytz.timezone('Europe/Brussels') # 獲取比利時時區
    <DstTzInfo 'Europe/Brussels' WET0:00:00 STD>
>>>tz = pytz.timezone('Asia/Shanghai') # 獲取上海時區
    <DstTzInfo 'Asia/Shanghai' LMT+8:06:00 STD>
# 資料庫取出的時間 轉換成datetime型別
>>>utcdate = datetime.datetime.strptimet('2012-12-12 00:00:00', "%Y-%m-%d %H:%M:%S")
    datetime.datetime(2012, 12, 12, 0, 0)
# replace是增加datetime上的時區屬性
>>>utcdate = utcdate.replace(tz0)
    datetime.datetime(2012, 12, 12, 0, 0, tzinfo=<DstTzInfo 'Europe/Brussels' WET0:00:00 STD>)
# 通過astimezone進行時區轉換
>>>newdate = utcdate.astimezone(tz)
    datetime.datetime(2012, 12, 12, 8, 0, tzinfo=<DstTzInfo 'Asia/Shanghai' CST+8:00:00 STD>)
# 最後把得到的時區轉成字串
>>>newdate.strftime("%Y-%m-%d %H:%M:%S")
    '2012-12-12 08:00:00'

2015年01月15日更新

上述程式碼中

utcdate.replace(tz0) 如果使用上海時區 會出現6分鐘的問題

可以使用

tz0.localize(utcdate) 替代