Python 时间操作之zoneinfo模块 复习回顾 1

这是我参与11月更文挑战的第7天,活动详情查看:2021最后一次更文挑战

复习回顾

我们都知道量度两个时刻之间的间隔长短的物理量叫做“时间”,时间是伴随的空间变化而变化的。众所周知,地球是围绕的太阳转动的。地球公转一周是一年,地球自转一周是一天。

由于地球是自西向东转的,东边区域比西方总是先看到太阳,因此划分出时区概念。

image.png

  • 什么是时区?

+ 时区是指同一个时间制的区域
+ 全球共划分24个时区(-12,12)
+ 以本初子午线为基准,从零时区向东划分东一区至东十二区;向西划分西一至四二区
  • Python 关于时间操作

我们前面已经学习相关的时间日期操作的模块

+ 重点关注系统日志文件的时间戳的[time 模块](https://dev.newban.cn/7024474853809848356)
+ 对时间日期进行更加人性化处理的[datetime模块](https://dev.newban.cn/7024792501047263269)
+ 打印出所有年或者月份的日历的[calendar模块](https://dev.newban.cn/7026680117770321950)

那么,关于时区处理相关操作的,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的一个子类

image.png

  • gmt、utc及本地时间

+ gmt:格林威治平时(也称格林威治时间),前世界标准时间
+ utc:协调世界时,又称现世界标准时间,由原子时间+世界时间两部分组成
+ 本地时间=gmt+时区偏移=utc+时区偏移
  • zoneinfo 模块特点

+ 支持IANA 时区查询,如时区查询代码Asia/Kolkata
+ 可以与datetime时间日期和日期算法上进行兼容,更加方便处理夏令时
+ 不提供时区数据,需要下载第三方库tzdata
  • zoneinfo 模块使用

zoneinfo 模块是Python 3.9版本支持的

+ 检查本地电脑Python版本更新到3.9
+ 在代码中只需要使用import进行导入即可
1
python复制代码import zoneinfo
  1. 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传递给构造函数
  1. 小试牛刀

我们根据前面集几节的学习,来对zoneinfo 模块相关方法进行学习

  • zoneinfo.Zoneinfol类是datetime.tzinfo抽象基类,可以传入tzinfo
  • Zoneinfo对象可以结合datetime.datetime实例化对象传入tzinfo字段,获取具有时间,进行时间计算等
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
python复制代码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())

image.png

总结

本期,我们对Python 3.9 新提供的zoneinfo模块相关使用进行学习,支持IANA时区查询,替代了以前必须要使用第三库pytz来转换时区代码。

以上是本期内容,欢迎大佬们点赞评论,下期见~

本文转载自: 掘金

开发者博客 – 和开发相关的 这里全都有

0%