Python使用pytz實現(xiàn)時區(qū)使用與轉(zhuǎn)換的示例詳解
一、Python代碼實現(xiàn):時區(qū)轉(zhuǎn)換與時間比較
import pytz
from datetime import datetime
# 1. 獲取當前UTC時間
utc_now = datetime.now(pytz.utc)
# 2. 轉(zhuǎn)換為目標時區(qū)(示例:上海和紐約)
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. 比較兩個時區(qū)的時間
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時區(qū)參數(shù)表格(常用時區(qū))
下表列出高頻使用的時區(qū)(完整列表包含563個時區(qū),需通過pytz.all_timezones獲?。?/p>
| 大洲 | 時區(qū)標識 | 代表城市/地區(qū) | UTC偏移示例 |
|---|---|---|---|
| 亞洲 | Asia/Shanghai | 中國上海 | UTC+8 |
| Asia/Tokyo | 日本東京 | UTC+9 | |
| Asia/Dubai | 阿聯(lián)酋迪拜 | 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 | 南非約翰內(nèi)斯堡 | UTC+2 | |
| 極地 | Antarctica/McMurdo | 南極麥克默多站 | UTC+12 |
| 通用 | UTC | 協(xié)調(diào)世界時 | UTC±0 |
三、擴展說明
獲取全部時區(qū)列表
import pytz
print("總時區(qū)數(shù)量:", len(pytz.all_timezones)) # 輸出563
for tz in pytz.common_timezones: # 常用時區(qū)(約403個)
print(tz)
關(guān)鍵注意事項:
- 夏令時影響:時區(qū)偏移量會隨夏令時變化(如紐約夏季為UTC-4,冬季為UTC-5)
- 時區(qū)命名規(guī)范:
大洲/城市格式(避免使用EST/CST等縮寫,因其不唯一) - 數(shù)據(jù)庫更新:通過
pip install --upgrade pytz更新時區(qū)規(guī)則
時區(qū)比較場景示例
# 檢查兩個時區(qū)是否均為星期一
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")) # 根據(jù)當前日期返回布爾值
查看有哪些時區(qū)
pytz有all_timezones、common_timezones這兩個屬性來查看有哪些時區(qū)。
# -*- coding: utf-8 -*- import pytz print(pytz.all_timezones) print(pytz.common_timezones)
查詢某個的時區(qū)
可以根據(jù)國家代碼查找這個國家的所有時區(qū)。
創(chuàng)建時區(qū)對象
根據(jù)上面得到的時區(qū)信息,就可以創(chuàng)建指定的時區(qū)對象。比如創(chuàng)建上海時區(qū)對象:
tz = pytz.timezone('Asia/Shanghai')時間按時區(qū)轉(zhuǎn)換
# -*- coding: utf-8 -*-
import pytz
import datetime
utc = pytz.timezone('UTC')
now_time = datetime.datetime.now(tz=utc)
print(now_time)
shanghai = pytz.timezone('Asia/Shanghai')
shanghai_time = datetime.datetime.now(tz=shanghai)
print(shanghai_time)得到某個時區(qū)的時間
然后在創(chuàng)建時間對象時進行指定上面時區(qū),就可以得到指定時區(qū)的日期時間:
>>> import datetime >>> datetime.datetime.now(tz) datetime.datetime(2009, 2, 21, 15, 12, 33, 906000, tzinfo=<DstTzInfo 'Asia/Shanghai' CST+8:00:00 STD>)
到此這篇關(guān)于Python使用pytz實現(xiàn)時區(qū)使用與轉(zhuǎn)換的示例詳解的文章就介紹到這了,更多相關(guān)Python pytz時區(qū)使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Jupyter Notebook/VSCode導出PDF中文不顯示的解決
這篇文章主要介紹了Jupyter Notebook/VSCode導出PDF中文不顯示的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-06-06
Python統(tǒng)計列表中的重復項出現(xiàn)的次數(shù)的方法
這篇文章主要介紹了Python統(tǒng)計列表中的重復項出現(xiàn)的次數(shù)的方法,需要的朋友可以參考下2014-08-08
使用Python的Tornado框架實現(xiàn)一個Web端圖書展示頁面
Tornado是Python的一款高人氣Web開發(fā)框架,這里我們來展示使用Python的Tornado框架實現(xiàn)一個Web端圖書展示頁面的實例,通過該實例可以清楚地學習到Tornado的模板使用及整個Web程序的執(zhí)行流程.2016-07-07

