iT邦幫忙

2024 iThome 鐵人賽

DAY 20
0

第十八天:Python 中的日期和時間操作

內容概述:

今天我們將學習如何在 Python 中操作日期和時間。處理日期和時間對於許多應用來說是至關重要的,比如計算任務的截止日期、紀錄系統事件日誌等。我們會介紹 datetime 模組,它能夠讓我們輕鬆地操作日期和時間。掌握這個知識可以幫助你開發涉及時間管理的應用,比如提醒、日曆、甚至數據分析中的時間戳處理。


一、什麼是 datetime 模組?

datetime 是 Python 標準庫中的模組,它提供了一組功能來處理日期和時間相關的操作。你可以使用這個模組來創建日期、時間,或將它們轉換為不同的格式來進行計算。


二、基本的日期和時間操作

1. 獲取當前日期和時間

要獲取系統的當前日期和時間,我們可以使用 datetime.now() 函數。

from datetime import datetime

current_time = datetime.now()  # 獲取當前日期和時間
print("當前時間:", current_time)

這會輸出像這樣的結果:

當前時間: 2024-10-04 10:23:45.678901
2. 創建特定日期和時間

如果你需要創建一個特定的日期和時間對象,可以使用 datetime() 函數。

from datetime import datetime

specific_date = datetime(2022, 12, 25, 15, 30)  # 創建特定日期和時間
print("特定時間:", specific_date)

上述程式碼將創建一個代表 2022 年 12 月 25 日下午 3:30 的時間對象。


三、格式化日期和時間

在許多情況下,我們可能需要將日期和時間格式化為易讀的形式,或者將字符串格式的時間轉換為日期對象。這可以通過 strftime()strptime() 函數來實現。

1. 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)
2. 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 對象。


四、日期和時間的計算

日期和時間的計算常見於許多應用場景,例如計算兩個日期之間的天數、添加特定的天數到某個日期等。

1. 計算兩個日期之間的差距

我們可以使用日期之間的差異來計算天數。

from datetime import datetime

date1 = datetime(2023, 1, 1)
date2 = datetime(2024, 10, 4)
delta = date2 - date1
print("兩個日期相差的天數:", delta.days)
2. 添加或減去時間

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
1. 將時間轉換為特定時區

我們可以將 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() 可以將時間從一個時區轉換到另一個時區。

六、應用實例

1. 倒數計時器:

實現一個簡單的倒數計時器,計算從當前時間到某個目標時間的剩餘天數和時間。

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} 小時")
2. 工作日計算器:

計算從當前日期起,向後推 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)

七、練習與實作

練習 1:
  • 實作一個程式,要求使用者輸入兩個日期,計算並顯示這兩個日期之間相差的天數。
練習 2:
  • 建立一個倒數計時器,倒數顯示距離某個特定事件(例如生日、重要節日)的剩餘時間。

這些練習涉及日期和時間的操作,展示如何計算日期之間的差異和建立倒數計時器。使用 Python 的 datetime 模組可以輕鬆實現這些功能。以下是每個練習的詳細說明和範例代碼。


練習 1:計算兩個日期之間的天數
步驟:
  1. 要求使用者輸入兩個日期(格式如 YYYY-MM-DD)。
  2. 計算並顯示兩個日期之間的相差天數。
範例代碼:
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 用來捕捉格式輸入錯誤,防止程式崩潰。

練習 2:建立一個倒數計時器
步驟:
  1. 要求使用者輸入一個未來的日期(例如生日、節日)。
  2. 計算並顯示從現在開始到那天的剩餘時間(天、時、分、秒)。
範例代碼:
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 中操作日期和時間,包括如何獲取當前時間、格式化日期、進行日期之間的運算等。這些技術在日常程式開發中非常有用,特別是在處理日曆應用、排程工具等方面。


上一篇
跟著 ChatGPT成為程式大佬!Python 處理 CSV 文件
下一篇
跟著 ChatGPT成為程式大佬!Python 中的裝飾器(Decorators)
系列文
如果讓chatgpt參加iThome鐵人賽,他竟然寫出...!?31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言