在 Python 中的日期操作
本文講解如何在 Python 中操作日期。
YouTube Video
在 Python 中的日期操作
在 Python 中,日期操作主要使用 datetime 模組。此模組提供了各種類別和函數,用於操作日期和時間。
以下是使用 datetime 模組進行基本日期操作的一些範例。
取得日期和時間
您可以按照以下方式獲取當前日期和時間。datetime.now() 和 datetime.today() 返回的結果幾乎相同,但在處理時區時可能會有差異。
1from datetime import datetime
2
3# Get the current date and time
4now = datetime.now()
5print(f"Current date and time: {now}")
6
7# Get today's date only
8today = datetime.today()
9print(f"Today's date: {today.date()}")- 此程式碼會取得並顯示當前的日期和時間,以及僅今天的日期。
創建特定的日期和時間
您可以按照以下方式建立特定的日期和時間。
1from datetime import datetime
2
3# Create a specific date and time
4specific_date = datetime(2023, 11, 7, 10, 30, 45)
5print(f"Specified date and time: {specific_date}")- 此程式碼會建立並顯示指定的日期與時間(2023 年 11 月 7 日,10:30:45)。
格式化日期
日期格式化可以按照以下方式進行。
1from datetime import datetime
2
3now = datetime.now()
4
5# Format the date
6formatted_date = now.strftime("%Y-%m-%d %H:%M:%S")
7print(f"Formatted date and time: {formatted_date}")- 此程式碼會取得當前的日期和時間,使用
strftime轉換為指定的格式,然後顯示出來。
日期格式字串
%Y: 年(4 位數)%m: 月(01 至 12)%d: 日(01 至 31)%H: 時(00 至 23)%M: 分(00 至 59)%S: 秒(00 至 59)
解析日期字串
您可以將表示日期的字串轉換為 datetime 物件。
1from datetime import datetime
2
3date_string = "2023-11-07 10:30:45"
4parsed_date = datetime.strptime(date_string, "%Y-%m-%d %H:%M:%S")
5print(f"Parsed date and time: {parsed_date}")- 此程式碼會使用
strptime()將表示日期的字串轉換為datetime物件並顯示出來。
日期運算
日期運算可以按照以下方式進行。
1from datetime import datetime, timedelta
2
3now = datetime.now()
4
5# Date for one day later
6tomorrow = now + timedelta(days=1)
7print(f"Date for one day later: {tomorrow}")
8
9# Date for one week ago
10last_week = now - timedelta(weeks=1)
11print(f"Date for one week ago: {last_week}")
12
13# Time for two hours later
14in_two_hours = now + timedelta(hours=2)
15print(f"Time for two hours later: {in_two_hours}")- 此程式碼會使用
timedelta來對當前日期和時間進行加減,計算並顯示明天、一週前以及二小時後的日期和時間。
處理時區
您也可以使用 datetime 模組來處理時區。
1from datetime import datetime, timezone, timedelta
2
3# Current UTC time
4utc_now = datetime.now(timezone.utc)
5print(f"Current UTC time: {utc_now}")
6
7# JST (UTC+9)
8jst = timezone(timedelta(hours=9))
9jst_now = datetime.now(jst)
10print(f"Current JST time: {jst_now}")datetime預設會返回 '天真型日期時間'(即不包含時區資訊)。您可以透過使用timezone類別或zoneinfo來明確處理時區資訊。
date 類別與 time 類別
使用 datetime 模組,您也可以僅處理日期或僅處理時間。
1from datetime import date, time
2
3d = date(2023, 11, 7)
4t = time(10, 30, 45)
5
6print(f"Date only: {d}")
7print(f"Time only: {t}")date類別僅處理日期,time類別僅處理時間。
datetime 和 timestamp 之間的轉換
可以在 UNIX 時間戳與 datetime 物件之間相互轉換。這裡的 UNIX 時間戳指自 1970 年 1 月 1 日起經過的秒數。
1from datetime import datetime
2
3now = datetime.now()
4
5# datetime → timestamp
6timestamp = now.timestamp()
7print(f"Timestamp: {timestamp}")
8
9# timestamp → datetime
10restored = datetime.fromtimestamp(timestamp)
11print(f"Restored datetime: {restored}")- 此程式碼會將當前日期和時間轉換為 UNIX 時間戳,然後再使用
fromtimestamp()函數將該時間戳轉換回datetime物件。
常見的陷阱
使用 datetime 模組時,應注意以下幾點。
datetime.now()不考慮時區,因此在需要國際化時,需明確地使用timezone.utc。- 請注意不要把格式字串中的
%m(月份)和%M(分鐘)混淆。
總結
datetime 模組還提供了許多其他功能,用於靈活操作日期和時間。此外,還有如 date、time 和 timedelta 等類別,專用於特定的操作。
使用其他庫還可以實現更加高級的日期操作。例如,pandas 擅長處理時間序列數據,而 dateutil 適合用於複雜的日期解析。此外,arrow 資料庫也非常有用。
您可以在我們的 YouTube 頻道上使用 Visual Studio Code 來跟隨上述文章一起學習。 請也查看我們的 YouTube 頻道。