这是我参与11月更文挑战的第7天,活动详情查看:2021最后一次更文挑战
复习回顾
我们都知道量度两个时刻之间的间隔长短的物理量叫做“时间”,时间是伴随的空间变化而变化的。众所周知,地球是围绕的太阳转动的。地球公转一周是一年,地球自转一周是一天。
由于地球是自西向东转的,东边区域比西方总是先看到太阳,因此划分出时区概念。
-
什么是时区?
-
时区是指同一个时间制的区域
-
全球共划分24个时区(-12,12)
-
以本初子午线为基准,从零时区向东划分东一区至东十二区;向西划分西一至四二区
-
-
Python 关于时间操作
我们前面已经学习相关的时间日期操作的模块
- 重点关注系统日志文件的时间戳的time 模块
- 对时间日期进行更加人性化处理的datetime模块
- 打印出所有年或者月份的日历的calendar模块
那么,关于时区处理相关操作的,Python 有没有相关的模块提供?
在Python 3.9之前,没有独立的模块对时区进行处理的模块,而是使用datetime模块中timezone类来实现的
在Python 3.9,提供了zoneinfo独立的模块支持IANA时区的支持。
接下来我们详细来学习一下zoneinfo模块相关方法吧,Let's go~
1. zoneinfo 模块概述
zoneinfo 模块是Python 3.9版本推出一个可以实现时区的模块,该模块默认情况下是使用系统时区的数据。
zoneinfo 模块是基于datetime、time模块的类型zoneinfo类而设计的
查看Zoneinfo代码,可知道Zoneinfo类是tzinfo的一个子类
-
gmt、utc及本地时间
- gmt:格林威治平时(也称格林威治时间),前世界标准时间
- utc:协调世界时,又称现世界标准时间,由原子时间+世界时间两部分组成
- 本地时间=gmt+时区偏移=utc+时区偏移
-
zoneinfo 模块特点
- 支持IANA 时区查询,如时区查询代码Asia/Kolkata
- 可以与datetime时间日期和日期算法上进行兼容,更加方便处理夏令时
- 不提供时区数据,需要下载第三方库tzdata
-
zoneinfo 模块使用
zoneinfo 模块是Python 3.9版本支持的
- 检查本地电脑Python版本更新到3.9
- 在代码中只需要使用import进行导入即可
import zoneinfo
2. zoneinfo 相关方法
-
zoneinfo 模块提供相关方法
| 方法 | 作用 |
|---|---|
| zoneinfo.avariable_timezones() | 获取包含IANA时区所有效的key值 |
| zoneinfo.reset_tzpath(to=None) | 设置或者重置时区搜索路径 |
-
zoninfo 模块提供给属性
| 属性 | 作用 |
|---|---|
| zoneinfo.TZPATH | 时区搜索的路径只读序列 |
- zoneinfo 模块提供的Zoneinfol类是datetime.tzinfo的抽象基类。
| 方法 | 作用 |
|---|---|
| zoneinfo.Zoneinfo(key) | 是datetime.tzinfo表示由字符串表示IANA时区 |
ps:Zoneinfo对象可以使用在datetime中传入给tzinfo
-
zoninfo.Zoneinfo类提供给方法
| 方法 | 作用 |
|---|---|
| Zoneinfo.clear_cache(*,key) | 清除zoneinfo方法缓存失效的 |
| Zoneinfo.form_file(fobj,/,key) | 构建一个zoneinfo从文件的对象返回字节 |
| Zoneinfo.no_cache(key) | 绕过构造函数缓存的备用构造函数 |
-
zoninfo.Zoneinfo类提供给属性
| 属性 | 作用 |
|---|---|
| Zoneinfo.key | 从IANA数据中只读attribute返回key传递给构造函数 |
3. 小试牛刀
我们根据前面集几节的学习,来对zoneinfo 模块相关方法进行学习
-
zoneinfo.Zoneinfol类是datetime.tzinfo抽象基类,可以传入tzinfo
-
Zoneinfo对象可以结合datetime.datetime实例化对象传入tzinfo字段,获取具有时间,进行时间计算等
import zoneinfo
from datetime import datetime,timedelta,timezone
tz = zoneinfo.ZoneInfo("Pacific/Kwajalein")
date_utc = datetime(2021,11,7,20,tzinfo=timezone.utc)
date_tz = date_utc.astimezone(tz)
date_tz_dst = date_tz+timedelta(hours=1)
print("utc时间:",date_utc)
print("tz时间:",date_tz)
print("tz_dst时间:",date_tz_dst)
print("时区简称:",date_utc.tzname())
总结
本期,我们对Python 3.9 新提供的zoneinfo模块相关使用进行学习,支持IANA时区查询,替代了以前必须要使用第三库pytz来转换时区代码。
以上是本期内容,欢迎大佬们点赞评论,下期见~