Python时间操作之pytz模块使用详解
介绍
Python内置模块datetime
提供了便捷的日期和时间相关操作。但是在处理多个地区或者国家的时间时,我们需要使用到更高效更准确的时间工具。pytz是Python中一个很好的时区支持库,它基于世界时(UTC)并与Olson数据库对应,可以在所有主要操作系统和Python版本上使用。
安装
pytz模块已经默认被包含在Python标准库中,如果你使用的是Python3.0及以上版本,则可以直接使用。如果你使用的是旧版本的Python,则需要先安装pytz模块。
pip install pytz
如果你使用Python3.0及以上版本,则可以在命令行中执行下述命令,确认是否已经安装成功。
python -m pytz
pytz模块基础用法
在使用pytz之前,我们先看一下datetime
模块的基础用法。
# 导入依赖库
from datetime import datetime, timedelta, timezone
# 获取当前时间
now = datetime.now()
print('当前时间:', now)
# 获取固定时间
dt = datetime(2022, 1, 1, 0, 0, 0)
print('固定时间:', dt)
# 时间转换
ts = now.timestamp()
print('时间戳:', ts)
dt = datetime.fromtimestamp(ts)
print('时间戳转时间:', dt)
# 时区转换
utc_dt = datetime.utcnow().replace(tzinfo=timezone.utc)
print('UTC时间:', utc_dt)
bj_tz = timezone(timedelta(hours=8))
bj_dt = utc_dt.astimezone(bj_tz)
print('北京时间:', bj_dt)
以上代码输出内容如下:
当前时间: 2022-10-07 08:04:46.673209
固定时间: 2022-01-01 00:00:00
时间戳: 1662518686.673209
时间戳转时间: 2022-10-07 08:04:46.673209
UTC时间: 2022-10-07 00:04:46.673209+00:00
北京时间: 2022-10-07 08:04:46.673209+08:00
pytz模块
pytz
模块提供了很多有用的时区信息,比如本世纪夏令时开始和结束的时间,夏令时偏移量,可以用于生成世界各地的本地日期和时间表示。
首先,我们可以通过pytz.all_timezones
获取pytz支持的所有时区信息。
# 获取所有时区
import pytz
print('pytz支持的时区:')
for tz in pytz.all_timezones:
print(tz)
以上代码部分输出内容如下:
Africa/Abidjan
Africa/Accra
Africa/Addis_Ababa
Africa/Algiers
Africa/Asmara
之后,我们可以通过pytz.timezone(timezone_name)
获取时区对应的datetime.tzinfo
对象,并和本地时间结合使用。
# 获取指定时区时间
import pytz
tz_utc_8 = pytz.timezone('Asia/Shanghai')
dt = datetime(2022, 1, 1, 0, 0, 0, tzinfo=tz_utc_8)
print('指定时区时间:', dt)
# 获取本地时间和指定时区时间
now = datetime.now(tz_utc_8)
print('本地时间:', now)
以上代码输出内容如下:
指定时区时间: 2022-01-01 00:00:00+08:06
本地时间: 2022-10-07 08:04:46.704992+08:00
示例应用
例1:世界各地的本地时间
下面的示例展示了如何根据不同的时区获取当地时间。
# 根据时区获取本地时间
import pytz
# 获取时区信息
tz_new_york = pytz.timezone('America/New_York')
tz_beijing = pytz.timezone('Asia/Shanghai')
tz_sydney = pytz.timezone('Australia/Sydney')
# 获取本地时间
now_new_york = datetime.now(tz_new_york)
now_beijing = datetime.now(tz_beijing)
now_sydney = datetime.now(tz_sydney)
# 输出本地时间
print('纽约时间:', now_new_york.strftime('%Y年%m月%d日 %H:%M:%S %Z'))
print('北京时间:', now_beijing.strftime('%Y年%m月%d日 %H:%M:%S %Z'))
print('悉尼时间:', now_sydney.strftime('%Y年%m月%d日 %H:%M:%S %Z'))
输出结果如下:
纽约时间: 2022年10月06日 20:18:22 EDT
北京时间: 2022年10月07日 08:18:22 CST
悉尼时间: 2022年10月07日 10:18:22 AEDT
例2:展示全球实时股票市场交易时间
这个例子展示了如何使用pytz模块来展示全球各大股票市场的实时交易时间。
# 全球股票市场实时交易时间
import pytz
import datetime
# 特定市场交易时间
market_time = {
'us': ('America/New_York', 'America/Los_Angeles'),
'china': ('Asia/Shanghai', ),
'japan': ('Asia/Tokyo', ),
'australia': ('Australia/Sydney', )
}
# 获取当前时间的市场时间
def get_market_time(market):
# 获取时区列表
time_zones = [pytz.timezone(tz) for tz in market_time[market]]
# 获取本地时间
now = datetime.datetime.now(pytz.utc)
# 分别转化为不同时区的时间
market_times = [now.astimezone(time_zone) for time_zone in time_zones]
# 返回结果
return {tz.zone: dt.strftime('%Y-%m-%d %H:%M:%S %Z') for tz, dt in zip(time_zones, market_times)}
# 输出全球各大市场实时时间
print(get_market_time('us'))
print(get_market_time('china'))
print(get_market_time('japan'))
print(get_market_time('australia'))
输出结果如下:
{'America/New_York': '2022-10-06 20:48:33 EDT', 'America/Los_Angeles': '2022-10-06 17:48:33 PDT'}
{'Asia/Shanghai': '2022-10-07 08:48:33 CST'}
{'Asia/Tokyo': '2022-10-07 09:48:33 JST'}
{'Australia/Sydney': '2022-10-07 11:48:33 AEDT'}
总结
本文介绍了pytz模块的基础用法,包括时区信息获取、日期和时间表示、世界各地的本地时间展示等方面,并给出了实际应用案例。掌握这些技能,可以方便地处理不同时区和国家的时间问题,更好地开发符合本地习惯的应用程序。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python时间操作之pytz模块使用详解 - Python技术站