Python 日期與時間 (Date & Time)
Python 的 datetime 模組提供了處理日期和時間的類別。
核心類別
datetime.date: 僅處理日期(年、月、日)datetime.time: 僅處理時間(時、分、秒、微秒)datetime.datetime: 同時處理日期和時間datetime.timedelta: 表示兩個時間點的差異(時間長度)
取得目前時間
from datetime import datetime, date
# 目前日期和時間
now = datetime.now()
print(now) # 例如: 2024-12-12 15:30:45.123456
# 目前日期
today = date.today()
print(today) # 例如: 2024-12-12
建立日期時間物件
from datetime import datetime, date, time
# 建立日期 (年, 月, 日)
d = date(2024, 12, 25)
print(d) # 2024-12-25
# 建立時間 (時, 分, 秒)
t = time(14, 30, 0)
print(t) # 14:30:00
# 建立日期時間
dt = datetime(2024, 12, 25, 14, 30, 0)
print(dt) # 2024-12-25 14:30:00
日期格式化 (strftime)
將日期物件轉換為字串。
from datetime import datetime
now = datetime.now()
# 常用格式
print(now.strftime("%Y-%m-%d")) # 2024-12-12
print(now.strftime("%H:%M:%S")) # 15:30:45
print(now.strftime("%Y/%m/%d %H:%M")) # 2024/12/12 15:30
print(now.strftime("%A, %B %d")) # Thursday, December 12
| 代碼 | 說明 | 範例 |
|---|---|---|
%Y | 4 位數年份 | 2024 |
%m | 月份 (01-12) | 12 |
%d | 日期 (01-31) | 12 |
%H | 小時 (00-23) | 15 |
%M | 分鐘 (00-59) | 30 |
%S | 秒數 (00-59) | 45 |
%A | 星期幾 (全名) | Thursday |
解析字串 (strptime)
將字串轉換為日期物件。
from datetime import datetime
date_string = "2024-12-25 14:30"
dt = datetime.strptime(date_string, "%Y-%m-%d %H:%M")
print(type(dt)) # <class 'datetime.datetime'>
print(dt.year) # 2024
print(dt.month) # 12
時間運算 (timedelta)
可以使用 timedelta 進行日期的加減運算。
from datetime import datetime, timedelta
now = datetime.now()
# 兩天後
future = now + timedelta(days=2)
# 一週前
past = now - timedelta(weeks=1)
# 3小時後
later = now + timedelta(hours=3)
print(f"現在: {now}")
print(f"兩天後: {future}")
也可以計算兩個日期的差距:
d1 = datetime(2025, 1, 1)
d2 = datetime(2024, 12, 25)
diff = d1 - d2
print(diff) # 7 days, 0:00:00
print(diff.days) # 7
UNIX 時間戳記 (Timestamp)
from datetime import datetime
# datetime 轉 timestamp (float)
now = datetime.now()
ts = now.timestamp()
print(ts) # 例如: 1734000000.0
# timestamp 轉 datetime
dt = datetime.fromtimestamp(ts)
print(dt)
時區處理 (Timezone)
在 Python 3.9+,建議使用標準庫 zoneinfo:
from datetime import datetime
from zoneinfo import ZoneInfo
# 建立帶時區的時間 (Taipei)
dt_tw = datetime.now(ZoneInfo("Asia/Taipei"))
print(dt_tw)
print(dt_tw.tzname()) # CST
# 轉換時區 (Taipei -> UTC)
dt_utc = dt_tw.astimezone(ZoneInfo("UTC"))
print(dt_utc)