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
代碼說明範例
%Y4 位數年份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)