当前位置: 代码网 > it编程>前端脚本>Python > Python使用pytz实现时区使用与转换的示例详解

Python使用pytz实现时区使用与转换的示例详解

2025年11月04日 Python 我要评论
一、python代码实现:时区转换与时间比较import pytzfrom datetime import datetime# 1. 获取当前utc时间utc_now = datetime.now(p

一、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_timezonescommon_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时区使用内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com