2025年10月21日 星期二

Python 學習筆記 : 用 UTC + 8 取得台灣時間的方法

最近在進行市圖爬蟲程式改版時發現一個紀錄本地日期時間的問題, 新版爬蟲程式抓到資料後會用 POST 方法呼叫我的 serverless 平台 API 將借書與預約資訊存入資料庫, 資料表中有一個欄位 updated_at 用來記錄更新時間, 最初是用 datetime.datetime.now() 取得時間再呼叫 strftime('%Y-%m-%d %H:%M:%S') 指定以 YYYY-mm-dd HH:MM:SS 格式字串儲存 :

from datetime import datetime  

now_str=datetiome.now().strftime('%Y-%m-%d %H:%M:%S')   

問題是當程式佈署在 render.com 時 now() 取得的是 UTC 時間, 雖然主機位於新加坡, 但可能其主機的時區設為 UTC 之故. 而我的 Maplebord 已經將時區設為台灣時區, 所以 now() 會傳回台灣時間, 同樣的程式佈署在不同主機上就會記錄不同的時間, 最簡單的解決辦法就是不要呼叫 now(), 而是呼叫 utcnow(), 它會傳回 UTC 時間, 只要加上 8 小時即為台灣時間, 這需要匯入 timedelta 函式來協助加上 8 小時 :

from datetime import datetime, timedelta  

utc_now=datetime.utcnow()   # UTC 現在時間
taiwan_now=utc_now + timedelta(hours=8)   # 加 8 小時得到台灣時間
now_str=taiwan_now.strftime('%Y-%m-%d %H:%M:%S')   # 指定日期時間格式

這樣程式不論佈署在哪個主機, 都會得到例如 2025-10-21 10:09:41 的台灣時區日期時間字串了. 

沒有留言 :