在 Python 中處理時區


時區是指所有時鐘都設定為相同標準時間的地圖區域,但由於政治選擇、歷史時區變化、夏令時差異和其他因素,各個位置可能具有不同的時間偏移量。Python 的 datetime 模組和 pytz 庫分別提供了一組用於處理日期、時間和時區的類。時區管理在軟體開發中至關重要,因為它會影響程式提供結果的準確性。本文將透過三個帶註釋的示例來探討如何使用datetimepytz 模組在 Python 中管理時區。

安裝

為了能夠使用時區,必須使用 Python 的 datetime 和 pytz 模組。pytz 庫是一個第三方包,它提供時區功能,而 datetime 模組提供用於處理日期和時間的類。

pip install pytz
pip install datetime
  • datetime 模組提供了多個用於處理日期和時間的類。主要的類包括date、tzinfo、timedelta、time 和 datetime

  • datetime 類表示特定的日期和時間,並且具有多個屬性,包括year、month、day、hour、minute、second 和 microsecond

  • datetime 類還提供了一些處理 datetime 物件的方法。我們可以使用replace() 函式修改 datetime 物件的一個或多個屬性,而不會影響其他屬性。

  • 可以使用strftime() 函式以特定格式將 datetime 物件格式化為字串。

語法

可以使用 pytz 庫的 timezone() 函式在 Python 中設定時區。datetime 模組可以使用 timezone() 函式返回的 timezone 物件,該函式接受一個指定時區名稱的字串。例如,我們可以使用以下程式碼將時區設定為“US/Eastern”−

import pytz
from datetime import datetime
eastern = pytz.timezone('US/Eastern')
dt = datetime.now(eastern)

但是,datetime 類本身並不支援時區。這就是 pytz 庫發揮作用的地方。pytz 模組提供了 timezone 類,該類表示一個時區物件。時區物件包含有關時區偏移量、夏令時規則和時區名稱的資訊。

pytz 模組還提供了一些用於處理時區的功能,包括 localize() 和normalize()localize() 函式用於為 datetime 物件設定時區,而normalize() 函式用於將 datetime 物件從一個時區轉換為另一個時區。

演算法

  • 建立 datetime 物件以在時區中顯示時間

  • 使用localize() 函式設定時區

  • 使用astimezone() 函式更改時區

  • 使用strftime() 函式在特定時區中將 datetime 物件轉換為字串

設定時區

使用 pytz.timezone() 函式建立時區物件並將其分配給一個變數

示例

import pytz
from datetime import datetime

# Create a timezone object for US/Eastern
eastern_tz = pytz.timezone('US/Eastern')
now = datetime.now()
now_eastern = eastern_tz.localize(now)
print(now_eastern)

輸出

2023-04-17 16:58:31.317459-04:00

使用pytz.timezone() 建立 US/Eastern 的時區物件,使用datetime.now() 建立當前時間的 datetime 物件,然後使用時區物件的localize() 方法為 datetime 物件設定時區。

在時區之間轉換時間

使用 datetime 和 pytz,我們可以使用 datetime 物件的 astimezone() 方法。

示例

import pytz
from datetime import datetime

# Create a timezone object for US/Eastern
eastern_tz = pytz.timezone('US/Eastern')
now = datetime.now()
now_eastern = eastern_tz.localize(now)

# Convert the datetime object to Pacific timezone
pacific_tz = pytz.timezone('US/Pacific')
now_pacific = now_eastern.astimezone(pacific_tz)
print(now_pacific)

輸出

2023-04-17 13:58:41.599015-07:00

使用 pytz 建立 US/Eastern 的時區物件。透過呼叫 timezone() 建立當前時間的 datetime 物件。在呼叫now() 後,使用時區物件的localise() 函式設定 datetime 物件的時區。

使用pytz.timezone() 例項化 US/Pacific 的另一個時區物件,並使用 datetime 物件的 astimezone() 方法將 datetime 物件轉換為太平洋時區。

使用時區格式化時間

使用 datetime 物件的 strftime() 方法可以更容易地進行格式化。

示例

import pytz
from datetime import datetime

# Create a timezone object for US/Eastern
eastern_tz = pytz.timezone('US/Eastern')
now = datetime.now()
now_eastern = eastern_tz.localize(now)

# Add formatting
fmt = '%Y-%m-%d %H:%M:%S %Z%z'
now_str = now_eastern.strftime(fmt)
print(now_str)

輸出

2023-04-17 16:59:06 EDT-0400

使用 datetime 物件的 strftime() 函式。格式字串'%Y-%m- %d%H:%M:%S%Z%z' 提供年份、月份、日期、小時、分鐘和秒,以及時區縮寫和時區偏移量。

結論

本文介紹了在 Python 中處理時區的核心概念和實踐。在討論時區在程式設計中的重要性之後,解釋了時區在軟體開發中的工作原理。然後討論了必要的庫和包,包括 pytz 和 datetime,以及安裝說明。之後,它深入探討了 Python 中時區的工作原理,包括設定時區、在時區之間轉換時間以及使用時區格式化時間。最後,它為每個任務提供了示例程式碼,以及如何解決常見的 Python 時區問題的指導。

更新於: 2023 年 4 月 18 日

20K+ 瀏覽量

啟動你的 職業生涯

透過完成課程獲得認證

開始學習
廣告