python處理datetime型別的時區轉換
阿新 • • 發佈:2019-01-11
需求:資料庫庫中的資料是按照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) 替代