2019年8月19日 星期一

使用pytz為datetime物件加上時區的注意事項

使用Python的datetime產生的物件是不會包含時區資訊的,在網路上搜尋加上時區的方式,一般都是建議用pytz,大概類似以下的作法。
import datetime
import pytz

mytz = pytz.timezone('Asia/Taipei')
mytime = datetime.datetime.now().replace(tzinfo=mytz)

print(mytime)
2019-08-19 14:56:50.450396+08:06
結果的確會顯示時區,不過好像哪裡怪怪的?台北所在的時區應該是+08:00,怎麼會變成+08:06,多加了六分鐘?

pytz的文件在開頭有提到,因為與Python內建的tzinfo API有實做上的差異,如果要顯示當地的時區,需使用localize()這個方法,範例如下。
import datetime
import pytz

mytz = pytz.timezone('Asia/Taipei')
mytime = mytz.localize(datetime.datetime.now())

print(mytime)

2019-08-19 14:56:50.450396+08:00
這樣就會顯示正確的時區。