Python pytz 時區使用舉例
? 一、Python代碼實現:時區轉換與時間比較
import pytz
from datetime import datetime# 1. 獲取當前UTC時間
utc_now = datetime.now(pytz.utc)# 2. 轉換為目標時區(示例:上海和紐約)
shanghai_tz = pytz.timezone('Asia/Shanghai')
newyork_tz = pytz.timezone('America/New_York')
shanghai_time = utc_now.astimezone(shanghai_tz)
newyork_time = utc_now.astimezone(newyork_tz)# 3. 比較兩個時區的時間
time_diff = shanghai_time - newyork_time
is_same_day = shanghai_time.date() == newyork_time.date()print(f"UTC時間: {utc_now.strftime('%Y-%m-%d %H:%M:%S %Z')}")
print(f"上海時間: {shanghai_time.strftime('%Y-%m-%d %H:%M:%S %Z')}")
print(f"紐約時間: {newyork_time.strftime('%Y-%m-%d %H:%M:%S %Z')}")
print(f"時間差: {abs(time_diff.total_seconds()/3600):.1f}小時")
print(f"是否同一天: {'是' if is_same_day else '否'}")
輸出示例:
UTC時間: 2025-06-26 07:30:00 UTC
上海時間: 2025-06-26 15:30:00 CST
紐約時間: 2025-06-26 03:30:00 EDT
時間差: 12.0小時
是否同一天: 是
🌍 二、pytz時區參數表格(常用時區)
下表列出高頻使用的時區(完整列表包含563個時區,需通過pytz.all_timezones
獲取):
大洲 | 時區標識 | 代表城市/地區 | UTC偏移示例 |
---|---|---|---|
亞洲 | Asia/Shanghai | 中國上海 | UTC+8 |
Asia/Tokyo | 日本東京 | UTC+9 | |
Asia/Dubai | 阿聯酋迪拜 | UTC+4 | |
美洲 | America/New_York | 美國紐約 | UTC-4 (夏令時) |
America/Los_Angeles | 美國洛杉磯 | UTC-7 (夏令時) | |
America/Sao_Paulo | 巴西圣保羅 | UTC-3 | |
歐洲 | Europe/London | 英國倫敦 | UTC+1 (夏令時) |
Europe/Paris | 法國巴黎 | UTC+2 (夏令時) | |
Europe/Moscow | 俄羅斯莫斯科 | UTC+3 | |
大洋洲 | Australia/Sydney | 澳大利亞悉尼 | UTC+10 |
Pacific/Auckland | 新西蘭奧克蘭 | UTC+12 | |
非洲 | Africa/Cairo | 埃及開羅 | UTC+2 |
Africa/Johannesburg | 南非約翰內斯堡 | UTC+2 | |
極地 | Antarctica/McMurdo | 南極麥克默多站 | UTC+12 |
通用 | UTC | 協調世界時 | UTC±0 |
🔍 三、擴展說明
-
獲取全部時區列表:
import pytz print("總時區數量:", len(pytz.all_timezones)) # 輸出563 for tz in pytz.common_timezones: # 常用時區(約403個)print(tz)
-
關鍵注意事項:
- 夏令時影響:時區偏移量會隨夏令時變化(如紐約夏季為UTC-4,冬季為UTC-5)
- 時區命名規范:
大洲/城市
格式(避免使用EST
/CST
等縮寫,因其不唯一) - 數據庫更新:通過
pip install --upgrade pytz
更新時區規則
-
時區比較場景示例:
# 檢查兩個時區是否均為星期一 def is_both_monday(tz1: str, tz2: str) -> bool:tz1_time = datetime.now(pytz.timezone(tz1))tz2_time = datetime.now(pytz.timezone(tz2))return tz1_time.weekday() == 0 and tz2_time.weekday() == 0 # 0=周一print(is_both_monday("Asia/Shanghai", "Europe/London")) # 根據當前日期返回布爾值