今天我們將學習如何在 Python 中操作日期和時間。處理日期和時間對於許多應用來說是至關重要的,比如計算任務的截止日期、紀錄系統事件日誌等。我們會介紹 datetime
模組,它能夠讓我們輕鬆地操作日期和時間。掌握這個知識可以幫助你開發涉及時間管理的應用,比如提醒、日曆、甚至數據分析中的時間戳處理。
datetime
模組?datetime
是 Python 標準庫中的模組,它提供了一組功能來處理日期和時間相關的操作。你可以使用這個模組來創建日期、時間,或將它們轉換為不同的格式來進行計算。
要獲取系統的當前日期和時間,我們可以使用 datetime.now()
函數。
from datetime import datetime
current_time = datetime.now() # 獲取當前日期和時間
print("當前時間:", current_time)
這會輸出像這樣的結果:
當前時間: 2024-10-04 10:23:45.678901
如果你需要創建一個特定的日期和時間對象,可以使用 datetime()
函數。
from datetime import datetime
specific_date = datetime(2022, 12, 25, 15, 30) # 創建特定日期和時間
print("特定時間:", specific_date)
上述程式碼將創建一個代表 2022 年 12 月 25 日下午 3:30 的時間對象。
在許多情況下,我們可能需要將日期和時間格式化為易讀的形式,或者將字符串格式的時間轉換為日期對象。這可以通過 strftime()
和 strptime()
函數來實現。
strftime()
- 將日期轉換為字符串格式strftime()
用來將日期和時間對象轉換為指定格式的字符串。
from datetime import datetime
current_time = datetime.now()
formatted_time = current_time.strftime("%Y-%m-%d %H:%M:%S") # 轉換為指定格式
print("格式化時間:", formatted_time)
格式化代碼示例:
%Y
: 四位數年份(如 2024)%m
: 月份(01-12)%d
: 日期(01-31)%H
: 小時(24 小時制,00-23)%M
: 分鐘(00-59)%S
: 秒(00-59)strptime()
- 將字符串轉換為日期相反,我們可以使用 strptime()
將字符串格式的日期轉換回日期對象。
from datetime import datetime
date_string = "2024-10-04 14:30:00"
parsed_date = datetime.strptime(date_string, "%Y-%m-%d %H:%M:%S")
print("解析後的日期:", parsed_date)
上述代碼會將日期字符串解析為 Python 中的 datetime
對象。
日期和時間的計算常見於許多應用場景,例如計算兩個日期之間的天數、添加特定的天數到某個日期等。
我們可以使用日期之間的差異來計算天數。
from datetime import datetime
date1 = datetime(2023, 1, 1)
date2 = datetime(2024, 10, 4)
delta = date2 - date1
print("兩個日期相差的天數:", delta.days)
timedelta
模組可以用來進行日期和時間的加減運算。
from datetime import datetime, timedelta
current_time = datetime.now()
future_time = current_time + timedelta(days=5) # 添加 5 天
print("五天後的時間:", future_time)
timedelta()
可以用來添加或減少天數、秒數等,像 timedelta(days=5)
會將時間向後推五天。在全球化的應用中,處理不同時區的日期和時間也是一項重要技能。Python 的 pytz
模組可以幫助我們處理這一問題。要使用 pytz
模組,你需要安裝它:
pip install pytz
我們可以將 datetime
對象轉換為指定的時區。
from datetime import datetime
import pytz
utc_time = datetime.now(pytz.utc) # 獲取 UTC 時間
taipei_time = utc_time.astimezone(pytz.timezone('Asia/Taipei')) # 轉換為台北時間
print("台北時間:", taipei_time)
pytz.timezone('Asia/Taipei')
是台北的時區。astimezone()
可以將時間從一個時區轉換到另一個時區。實現一個簡單的倒數計時器,計算從當前時間到某個目標時間的剩餘天數和時間。
from datetime import datetime
target_date = datetime(2025, 1, 1)
current_time = datetime.now()
remaining_time = target_date - current_time
print(f"距離目標日期還有 {remaining_time.days} 天 {remaining_time.seconds // 3600} 小時")
計算從當前日期起,向後推 10 個工作日的日期(不包括週末)。
from datetime import datetime, timedelta
def add_workdays(start_date, num_workdays):
current_date = start_date
while num_workdays > 0:
current_date += timedelta(days=1)
if current_date.weekday() < 5: # 週一到週五是工作日
num_workdays -= 1
return current_date
current_time = datetime.now()
future_workday = add_workdays(current_time, 10)
print("十個工作日後的日期:", future_workday)
這些練習涉及日期和時間的操作,展示如何計算日期之間的差異和建立倒數計時器。使用 Python 的 datetime
模組可以輕鬆實現這些功能。以下是每個練習的詳細說明和範例代碼。
YYYY-MM-DD
)。from datetime import datetime
def calculate_days_between():
# 讓使用者輸入兩個日期,格式為 YYYY-MM-DD
date_format = "%Y-%m-%d"
date1_str = input("請輸入第一個日期 (格式:YYYY-MM-DD): ")
date2_str = input("請輸入第二個日期 (格式:YYYY-MM-DD): ")
try:
# 將字串轉換為日期物件
date1 = datetime.strptime(date1_str, date_format)
date2 = datetime.strptime(date2_str, date_format)
# 計算兩個日期之間的差異
days_difference = abs((date2 - date1).days)
print(f"兩個日期之間相差 {days_difference} 天")
except ValueError:
print("日期格式錯誤,請輸入正確的日期格式。")
# 執行程式
calculate_days_between()
datetime.strptime()
:將字串轉換為 datetime
物件,格式化為 YYYY-MM-DD
。abs()
:確保天數差異為正數,不管哪個日期在前。try-except
用來捕捉格式輸入錯誤,防止程式崩潰。from datetime import datetime
def countdown_to_event():
# 讓使用者輸入一個未來日期,格式為 YYYY-MM-DD
event_date_str = input("請輸入事件的日期 (格式:YYYY-MM-DD): ")
date_format = "%Y-%m-%d"
try:
# 將字串轉換為日期物件
event_date = datetime.strptime(event_date_str, date_format)
# 取得當前時間
current_time = datetime.now()
# 計算剩餘的時間
time_difference = event_date - current_time
# 如果事件日期已過,則提示事件已過
if time_difference.total_seconds() < 0:
print("事件日期已過。")
else:
# 計算天、時、分、秒
days = time_difference.days
hours, remainder = divmod(time_difference.seconds, 3600)
minutes, seconds = divmod(remainder, 60)
print(f"距離事件還有 {days} 天 {hours} 小時 {minutes} 分 {seconds} 秒")
except ValueError:
print("日期格式錯誤,請輸入正確的日期格式。")
# 執行程式
countdown_to_event()
datetime.now()
:獲取當前的日期和時間。divmod()
:同時計算整數商和餘數,方便將秒數轉換為時、分、秒。這兩個練習展示了如何使用 datetime
模組來進行日期和時間的計算,包括計算日期差異以及設置倒數計時器。
今天我們學習了如何在 Python 中操作日期和時間,包括如何獲取當前時間、格式化日期、進行日期之間的運算等。這些技術在日常程式開發中非常有用,特別是在處理日曆應用、排程工具等方面。