Python时间操作之pytz模块使用详解


Posted in Python onJune 14, 2022

前言

在我们日常生活中,时间概念常伴我们左右。让我们简单的回忆一下自己的一天,大致有以下时间点:

  • 8:00,清晨的阳光照射到床头伴着闹钟,你从睡眠中清醒
  • 8:30,你洗漱完成换好工装,出门上班
  • 9:00,准时坐到工位上,开始一天的工作
  • 12:00,吃午饭午休
  • 14:00,开始下午的工作
  • ....,时间无处不在,在我们日程计划中占着标志flag的角色

假设,同事突然问你Moscow城市,现在几点了啦。这时候我们要经过时区的换算的一系列麻烦的过程

有没有更快的方法计算出指定时区的时间?----答案肯定有

在学习Python过程中,我们已经了解了一些关于时间操作的库,如:

  • Python内置库:time,datatime,calendar,zoneinfo
  • 第三方库:dateutil,pytz,arrow

Python时间操作之pytz模块使用详解

关于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()字典中

Python时间操作之pytz模块使用详解

我们可以通过 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
---

总结

本期我们对时间操作的pytz模块进行基本的了解和学习。pytz模块可以帮助我们快速进行时区计算出时间,pytz模块具有tzinfo特性。

到此这篇关于Python时间操作之pytz模块使用详解的文章就介绍到这了,更多相关Python pytz模块内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!


Tags in this post...

Python 相关文章推荐
python在linux中输出带颜色的文字的方法
Jun 19 Python
Python 的描述符 descriptor详解
Feb 27 Python
python使用TensorFlow进行图像处理的方法
Feb 28 Python
flask session组件的使用示例
Dec 25 Python
Python 根据日志级别打印不同颜色的日志的方法示例
Aug 08 Python
numpy中三维数组中加入元素后的位置详解
Nov 28 Python
python 解决cv2绘制中文乱码问题
Dec 23 Python
将tensorflow.Variable中的某些元素取出组成一个新的矩阵示例
Jan 04 Python
Python安装OpenCV的示例代码
Mar 05 Python
python中前缀运算符 *和 **的用法示例详解
May 28 Python
Kmeans均值聚类算法原理以及Python如何实现
Sep 26 Python
安装pyinstaller遇到的各种问题(小结)
Nov 20 Python
Django框架之路由用法
Jun 10 #Python
深入理解pytorch库的dockerfile
Jun 10 #Python
如何利用python实现列表嵌套字典取值
Jun 10 #Python
python中filter,map,reduce的作用
Jun 10 #Python
Django框架中模型的用法
Jun 10 #Python
Django框架中视图的用法
Jun 10 #Python
python基础之//、/与%的区别详解
Jun 10 #Python
You might like
JavaScript 函数replace深入了解
2013/03/14 Javascript
当前页禁止复制粘贴截屏代码小集
2013/07/24 Javascript
Extjs4中的分页应用结合前后台
2013/12/13 Javascript
基于jQuery实现点击最后一行实现行自增效果的表格
2016/01/12 Javascript
jquery 遍历数组 each 方法详解
2016/05/25 Javascript
文本框只能输入数字的实现方法(兼容IE火狐)
2016/06/25 Javascript
node.js中module.exports与exports用法上的区别
2016/09/02 Javascript
微信小程序 时间格式化(util.formatTime(new Date))详解
2016/11/16 Javascript
你真的了解BOM中的history对象吗
2017/02/13 Javascript
vuejs 动态添加input框的实例讲解
2018/08/24 Javascript
微信小程序实现点赞、取消点赞功能
2018/11/02 Javascript
三分钟教你用Node做一个微信哄女友(基友)神器(面向小白)
2019/06/21 Javascript
JavaScript表格隔行变色和Tab标签页特效示例【附jQuery版】
2019/07/11 jQuery
vue 项目软键盘回车触发搜索事件
2020/09/09 Javascript
[47:20]DAC2018 4.4 淘汰赛 Optic vs Mineski 第一场
2018/04/05 DOTA
使用python搭建Django应用程序步骤及版本冲突问题解决
2013/11/19 Python
Python实现基于HTTP文件传输实例
2014/11/08 Python
python中urllib模块用法实例详解
2014/11/19 Python
win8.1安装Python 2.7版环境图文详解
2019/07/01 Python
在django中实现页面倒数几秒后自动跳转的例子
2019/08/16 Python
解决pycharm上的jupyter notebook端口被占用问题
2019/12/17 Python
python 多线程爬取壁纸网站的示例
2021/02/20 Python
专门出售各种儿童读物的网站:Put Me In The Story
2016/08/07 全球购物
美国婚戒购物网站:Anjays Designs
2017/06/28 全球购物
Perfume’s Club法国站:购买香水和化妆品
2019/05/02 全球购物
博朗(Braun)俄罗斯官方商店:德国小家电品牌
2019/09/24 全球购物
西雅图的买手店:Totokaelo
2019/10/19 全球购物
莫斯科制造商的廉价皮大衣:Fursk
2020/06/09 全球购物
财务管理专业应届毕业生求职信
2013/09/22 职场文书
圣诞节红领巾广播稿
2014/02/03 职场文书
2014学年自我鉴定
2014/02/23 职场文书
家长对孩子的感言
2014/03/10 职场文书
艺术设计专业个人求职信
2014/04/10 职场文书
村党建工作汇报材料
2014/11/02 职场文书
驳回起诉裁定书
2015/05/19 职场文书
在python中实现导入一个需要传参的模块
2021/05/12 Python