在 Python 中的日期操作

在 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 類別僅處理時間。

datetimetimestamp 之間的轉換

可以在 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 模組還提供了許多其他功能,用於靈活操作日期和時間。此外,還有如 datetimetimedelta 等類別,專用於特定的操作。

使用其他庫還可以實現更加高級的日期操作。例如,pandas 擅長處理時間序列數據,而 dateutil 適合用於複雜的日期解析。此外,arrow 資料庫也非常有用。

您可以在我們的 YouTube 頻道上使用 Visual Studio Code 來跟隨上述文章一起學習。 請也查看我們的 YouTube 頻道。

YouTube Video