一、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"))  # 根据当前日期返回布尔值
查看有哪些时区
pytz有all_timezones、common_timezones这两个属性来查看有哪些时区。
# -*- coding: utf-8 -*- import pytz print(pytz.all_timezones) print(pytz.common_timezones)
查询某个的时区
可以根据国家代码查找这个国家的所有时区。
创建时区对象
根据上面得到的时区信息,就可以创建指定的时区对象。比如创建上海时区对象:
tz = pytz.timezone('asia/shanghai')时间按时区转换
# -*- 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)得到某个时区的时间
然后在创建时间对象时进行指定上面时区,就可以得到指定时区的日期时间:
>>> import datetime >>> datetime.datetime.now(tz) datetime.datetime(2009, 2, 21, 15, 12, 33, 906000, tzinfo=<dsttzinfo 'asia/shanghai' cst+8:00:00 std>)
到此这篇关于python使用pytz实现时区使用与转换的示例详解的文章就介绍到这了,更多相关python pytz时区使用内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
            
                                            
                                            
                                            
                                            
                                            
发表评论