python處理時間日期常用模塊有time和datetime。1. 獲取當前時間:使用time模塊通過time()獲取時間戳,結合localtime和strftime可格式化輸出;datetime模塊通過now()獲取當前時間并用strftime格式化。2. 時間轉換:字符串轉時間對象用strptime,時間對象轉時間戳用timestamp,時間戳轉字符串用fromtimestamp結合strftime。3. 時間加減與差值計算:使用timedelta進行加減操作,兩個datetime對象相減得到timedelta,可用days等屬性獲取間隔。4. 時區處理:推薦使用zoneinfo模塊處理帶時區的時間轉換,也可用pytz兼容舊版本。掌握這些常用方法即可應對多數時間處理場景。
python 處理時間日期和做時間轉換,其實不算特別難,但涉及的模塊多、函數也雜,一不小心就容易搞混。這篇文章就來聊聊常用的處理方式,把那些你可能會用到的時間相關函數都列出來,順便說說它們怎么用。
獲取當前時間
最常用的就是獲取當前時間戳或者格式化時間字符串了。Python 提供了幾個模塊可以完成這個任務,其中 time 和 datetime 是最常用的兩個。
- 使用 time 模塊:
import time timestamp = time.time() # 獲取當前時間戳(秒) local_time = time.localtime() # 轉為本地時間結構 formatted_time = time.strftime("%Y-%m-%d %H:%M:%S", local_time) # 格式化輸出
- 使用 datetime 模塊:
from datetime import datetime now = datetime.now() print(now.strftime("%Y-%m-%d %H:%M:%S")) # 輸出格式化時間
如果你只是想拿到當前時間,這兩個模塊基本就夠用了。datetime 更加面向對象一些,操作起來更方便;而 time 更接近底層系統時間接口。
立即學習“Python免費學習筆記(深入)”;
時間戳與時間字符串互轉
很多時候你需要把字符串轉成時間戳,或者反過來。比如從日志里解析時間,或者保存時間數據到數據庫。
- 字符串轉時間對象:
from datetime import datetime date_str = "2024-03-15 10:30:00" dt = datetime.strptime(date_str, "%Y-%m-%d %H:%M:%S")
- 時間對象轉時間戳:
timestamp = dt.timestamp()
- 時間戳轉字符串:
dt = datetime.fromtimestamp(timestamp) formatted = dt.strftime("%Y-%m-%d %H:%M:%S")
這里需要注意的是,不同格式的字符串需要對應不同的格式參數,否則會報錯。比如 %Y 是四位年份,%y 是兩位年份,別搞錯了。
時間加減與計算間隔
有時候你想知道“三天后是幾號”、“某兩個時間差多少小時”,這時候就需要做一些時間上的加減和差值計算。
- 加減時間:
可以用 timedelta 來做簡單的加減:
from datetime import datetime, timedelta now = datetime.now() future = now + timedelta(days=3, hours=2)
- 計算時間差:
start = datetime(2024, 3, 10) end = datetime(2024, 3, 15) delta = end - start print(delta.days) # 輸出天數差
注意:兩個時間必須都是 datetime 類型才能相減,返回的是一個 timedelta 對象。
時區處理(稍微復雜一點)
默認情況下,Python 的時間是不帶時區信息的。如果涉及到跨時區的時間轉換,比如 UTC 和北京時間之間的轉換,就需要引入 pytz 或者 Python 3.9+ 的 zoneinfo。
- 使用 zoneinfo(推薦):
from datetime import datetime, timezone from zoneinfo import ZoneInfo utc_time = datetime.now(timezone.utc) bj_time = utc_time.astimezone(ZoneInfo("Asia/Shanghai"))
- 使用 pytz(兼容舊版本):
from datetime import datetime import pytz utc = pytz.utc bj = pytz.timezone('Asia/Shanghai') now_utc = datetime.now(utc) now_bj = now_utc.astimezone(bj)
這部分雖然看起來有點麻煩,但只要記住:帶時區的時間才是“準確”的時間。如果不處理好時區問題,跨地區應用可能會出 bug。
基本上就這些了。Python 的時間處理功能很全,但也正因為這樣,剛上手的時候會覺得有點繞。不過只要掌握幾個常用函數和模塊,再結合實際場景多練幾次,很快就能熟練了。