Python时间操作之pytz模块使用详解
作者:盆友圈的小可爱 发布时间:2023-05-10 02:57:17
前言
在我们日常生活中,时间概念常伴我们左右。让我们简单的回忆一下自己的一天,大致有以下时间点:
8:00,清晨的阳光照射到床头伴着闹钟,你从睡眠中清醒
8:30,你洗漱完成换好工装,出门上班
9:00,准时坐到工位上,开始一天的工作
12:00,吃午饭午休
14:00,开始下午的工作
....,时间无处不在,在我们日程计划中占着标志flag的角色
假设,同事突然问你Moscow城市,现在几点了啦。这时候我们要经过时区的换算的一系列麻烦的过程
有没有更快的方法计算出指定时区的时间?----答案肯定有
在学习Python过程中,我们已经了解了一些关于时间操作的库,如:
Python内置库:time,datatime,calendar,zoneinfo
第三方库:dateutil,pytz,arrow
关于Python时间操作内置库,大家可以访问往期内容。本期,我们来重点学习一下pytz模块的使用方法,Let's go~~
1. pytz 模块概述
什么是 pytz 模块
pytz 模块是依赖Olson tz数据库导入的,它支持直接使用时区名进行时间计算
pytz 模块涉及时区,因此其也指定tzinfo信息(详情可见datetime.tzinfo)
pytz 模块通常与datetime模块结合一起使用,返回具体的时间名
pytz 模块可以解决夏令时结束时不明确的问题
重要说明:
pytz 模块支持大多数的时区计算,使用IANA的数据接口,CLDR(Unicode 语言环境)项目提供翻译
本地还需要按照依赖是时区映射表tzdata数据库(pip install tzdata)
国家时区映射关系表
国家/城市代码映射表,pytz库中存储在_CountryTimezoneDict()
字典中
我们可以通过 pytz.country_timezones常量来获取code,timezon
<pytz._CountryTimezoneDict object at 0x00000256FBE52E30>
pytz 模块使用方法
由于pytz是第三方库,因此我们在使用前需要使用pip进行下载其依赖库
pip install pytz
代码中使用时,我们需要使用import来进行导入
# 方式一:导入整个模块
import pytz
# 方式二:导入具体的库
from pytz import timezone
2. pytz 相关方法
pytz 模块包含国家码查询、时区名等方法
创建本地化时间:
方式一:pytz.timezone(tzname).localise()
tz = pytz.timezone('US/Eastern')
local_time =tz.localize(datetime.datetime(2022, 6, 13,23, 0, 0))
print(local_time)
方式二:local_time.astimezone(tzname)
ast = local_time.astimezone(tz)
方式三:tz.normzlize()处理夏令时
nor = tz.normzlize(datetime.datetime(2022, 6, 13,23, 0, 0))
时区名获取:
时区名各式化:pytz.timezone(tzname)
获取所有的时区:pytz.country_timezones.values()
获取地区的代码:pytz.country_timezones.keys()
3. pytz 时区查询
根据pytz模块相关方法,我们可以写一个函数来实现场景:
输入一个城市:city,如"Simferopol"
输出城市的时区偏离量:如+3
实现思路,大致如下:
首先调用pytz.country_timezones.values()获取到所有的时区timezones
使用split()将时区的城市名进行分割形成列表city_list
先在city_list.index[city]找到City_index
然后根据City_index在timezones找到时区tzname
pytz.timezone(tzname)格式化,算出标准时间
import pytz
from datetime import datetime
def timezon_city_gmt(city):
timezons = sum(list(pytz.country_timezones.values()),[])
cityList = [city.split("/")[1] for city in timezons]
city_index = cityList.index(city)
tz = pytz.timezone(timezons[city_index])
gmt = "GMT" + str(datetime.now().astimezone(tz))[-6:]
return gmt
print(timezon_city_gmt("Simferopol"))
---
GMT+03:00
---
4. pytz 日期计算
同理,我们日常生活中根据当地时间,算出对方所在时区的当地时间,思路与上述大致一样。
datetime.strptime()将时间字符串转化成datetime对象
import pytz
from datetime import datetime
def update_datetime_tz(olddatetime, city, formate):
timezons = sum(list(pytz.country_timezones.values()), [])
cityList = [city.split("/")[1] for city in timezons]
city_index = cityList.index(city)
tz = pytz.timezone(timezons[city_index])
datetime_type = datetime.strptime(olddatetime, formate)
newdatetime = datetime_type.astimezone(tz)
return newdatetime.strftime(str(formate))
print(update_datetime_tz("2022-06-13 12:46:03","Moscow","%Y-%m-%d %H:%M:%S"))
---
2022-06-13 07:46:03
---
来源:https://juejin.cn/post/7108749634863890468
![](https://www.aspxhome.com/images/zang.png)
![](https://www.aspxhome.com/images/jiucuo.png)
猜你喜欢
- 本文实例讲述了PHP实现对数组分页处理方法。分享给大家供大家参考,具体如下:最近用到了用数组数据分页,这里整理了一下,具体代码如下:<
- 本文实例讲述了python实现删除文件与目录的方法。分享给大家供大家参考。具体实现方法如下:os.remove(path)删除文件 path
- 平时我们写个脚本,要放到后台执行去,我们怎么做呢?nohup python example.py 2>&1 /dev/null
- 1. base64编码简介用记事本打开exe、jpg、pdf这些文件时,我们都会看到一大堆乱码,因为二进制文件包含很多无法显示和打印的字符,
- 目录一、运行效果二、实现方法1. 爬虫部分2.Tkinter部分三、打包四、代码获取今天咱们用Python爬虫和Tkinter界面来做一个翻
- 我们都知道python的版本不同,在使用的时候就有所区别。鉴于我们推荐小伙伴们选择python3版本,所以这方面的区别了解的不是很多。就拿_
- 结合这个例子分析一下结果:结合以往C语言的基础,画了一张图来解释为什么会有上面这些值的出现。先查看下Go中的这两个运算符是啥吧。①对于所有带
- ----------记录一下这两天做的一个小demo功能是要实现一个从前端传给后端一张图片,在后端完成目标检测后,传给前端,前端接收后并展示
- 如下所示:import matplotlib.pyplot as pltimport numpy as npx = [11422,11360
- 本文实例为大家分享了python计算日期之间的放假日期,供大家参考,具体内容如下代码如下:#encoding=utf-8 print
- CSS的背景属性“background”提供了众多属性值,如颜色、图像、定位等,为网页背景图像的定义提供了极大的便利。看看backgroun
- 本文实例讲述了php面象对象数据库操作类。分享给大家供大家参考。具体实现代码如下://此处构造一个数据库操作类,封装所有数据库操作 //可以
- 往往我们在建立一个较为大型的网站的时候会有很多的副页面框架模式甚至一些小的细节元素都是相同的,但是令人困扰的是在更新它们时却要费些周折,要一
- 这里针对smtplib做了一系列封装,可以完成以下四种场景:发送纯文本的邮件发送html页面的邮件发送带附件文件的邮件发送能展示图片的邮件以
- 前言快520了,咱们来玩玩五子棋陶冶情操。快拿这个和你女朋友去对线。(分了别来找我哇)。多的不说直接进入正题人人对战游戏规则:p1为黑子,p
- 本文实例讲述了PHP封装CURL扩展类。分享给大家供大家参考。具体如下:<?php/*** @description: 封装CURL扩
- 实现思路很多网站都有拼图验证码1.首先要了解拼图验证码的生成原理2.制定破解计划,考虑其可能性和成功率。3.编写脚本很多网站的拼图验证码都是
- 本文实例讲述了彻底删除thinkphp3.1案例blog标签的方法。分享给大家供大家参考。具体方法如下:thinkphp3.1框架中的案例b
- 无参数函数先解释一下时间戳,所谓时间戳,即自1970年1月1日00:00:00所经历的秒数,然后就可以理解下面的函数了。下面代码默认from
- 写在前面的话关于《交互设计实用指南》,我们最近收到很多朋友的反馈,有支持的也有批评的,在此一并感谢了,有你们的关注,我们才能走得更远。《交互