在開發程式時,我們經常會需要處理日期與時間相關的任務,例如:計算兩個日期之間的天數、記錄檔案的創建時間,或是規劃一個定時執行的排程任務。
Python 內建的 datetime 模組就是處理這些問題的最佳利器。它提供了許多類別與方法,讓您能夠以物件導向的方式,更直觀、更精準地操作日期與時間。
本文將帶您快速認識 datetime 模組中的核心類別,並透過實用範例,讓您輕鬆掌握時間操作的技巧。
1. 啟用 datetime 模組
datetime 是一個標準函式庫,使用前只需將其匯入:
import datetime
2. 認識核心類別
datetime 模組主要包含了四個核心類別,它們各自負責處理不同層面的時間資訊:
類別 | 作用 | 範例 |
---|---|---|
date | 僅處理日期,不包含時間。 | datetime.date(2025, 9, 2) |
time | 僅處理時間,不包含日期。 | datetime.time(16, 1, 3) |
datetime | 完整包含日期與時間。 | datetime.datetime(2025, 9, 2, 16, 1) |
timedelta | 表示兩個時間點之間的時間差。 | datetime.timedelta(days=7) |
3. 實用操作範例
範例一:取得當前日期與時間
您可以使用 datetime.date.today() 或 datetime.datetime.now() 來快速取得當前的日期或時間。
# 取得今天的日期
today_date = datetime.date.today()
print(f"今天的日期是:{today_date}") # 輸出:2025-09-02
# 取得當前完整的日期與時間
current_time = datetime.datetime.now()
print(f"現在的時間是:{current_time}") # 輸出:2025-09-02 16:01:03.123456
範例二:創建指定的日期與時間物件
除了取得當前時間,您也可以自行定義一個特定日期或時間的物件。
# 創建一個指定的日期物件
specified_date = datetime.date(2025, 1, 1)
print(f"指定日期:{specified_date}")
# 創建一個指定的完整時間物件
meeting_time = datetime.datetime(2025, 9, 3, 10, 0, 0)
print(f"會議時間:{meeting_time}")
範例三:時間加減運算與 timedelta
timedelta 類別讓您能輕鬆進行時間的加減運算。您可以加上或減去天數、小時、分鐘、秒數等,這對於排程或計算未來/過去的時間點非常有用。
# 定義一個時間差,例如 7 天
seven_days = datetime.timedelta(days=7)
# 計算一週後的日期
today = datetime.date.today()
next_week = today + seven_days
print(f"今天:{today}")
print(f"下週的今天:{next_week}")
# 計算一個月前的大概日期(30天)
thirty_days_ago = today - datetime.timedelta(days=30)
print(f"約 30 天前的日期:{thirty_days_ago}")
# 計算兩個日期之間的天數差
start_date = datetime.date(2025, 1, 1)
end_date = datetime.date(2025, 9, 2)
days_difference = end_date - start_date
print(f"從 2025/1/1 到 2025/9/2 總共有 {days_difference.days} 天。")
範例四:格式化日期與時間為字串
當您想將日期與時間顯示為特定的格式時,可以使用 strftime() 方法。它會將 datetime 物件轉換為格式化的字串。
- %Y:四位數年份 (e.g., 2025)
- %m:兩位數月份 (01-12)
- %d:兩位數日期 (01-31)
- %H:24小時制小時 (00-23)
- %M:分鐘 (00-59)
- %S:秒數 (00-59)
- %A:星期幾的全名 (e.g., Tuesday)
current_time = datetime.datetime.now()
# 格式化為:年/月/日 時:分
formatted_string1 = current_time.strftime("%Y/%m/%d %H:%M")
print(f"格式化範例一:{formatted_string1}") # 輸出:2025/09/02 16:01
# 格式化為:月-日-年 星期幾
formatted_string2 = current_time.strftime("%m-%d-%Y %A")
print(f"格式化範例二:{formatted_string2}") # 輸出:09-02-2025 Tuesday
透過這些基本操作,您就能夠輕鬆處理大多數的日期與時間問題。datetime 模組的強大之處在於,它將時間視為可以進行運算與格式化的物件,讓您的程式碼更具邏輯性與可讀性。