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在线运行代码助手
Jul 15 Python
python日志记录模块实例及改进
Feb 12 Python
Python实现的异步代理爬虫及代理池
Mar 17 Python
python交互式图形编程实例(二)
Nov 17 Python
python 识别图片中的文字信息方法
May 10 Python
django框架F&amp;Q 聚合与分组操作示例
Dec 12 Python
Python3 Tensorlfow:增加或者减小矩阵维度的实现
May 22 Python
pycharm软件实现设置自动保存操作
Jun 08 Python
利用Python中的Xpath实现一个在线汇率转换器
Sep 09 Python
Scrapy中如何向Spider传入参数的方法实现
Sep 28 Python
Pandas数据类型之category的用法
Jun 28 Python
Python中Schedule模块使用详解 周期任务神器
Apr 19 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
PHP学习笔记 IIS7下安装配置php环境
2012/10/29 PHP
php计算程序运行时间的简单例子分享
2014/05/10 PHP
laravel 数据验证规则详解
2019/10/23 PHP
ThinkPhP+Apache+PHPstorm整合框架流程图解
2020/11/23 PHP
20款非常优秀的 jQuery 工具提示插件 推荐
2012/07/15 Javascript
jQuery计算文本框字数及限制文本框字数的方法
2016/03/01 Javascript
手机图片预览插件photoswipe.js使用总结
2016/08/25 Javascript
Javascript 判断两个IP是否在同一网段实例代码
2016/11/28 Javascript
前端框架学习总结之Angular、React与Vue的比较详解
2017/03/14 Javascript
Vue-cli创建项目从单页面到多页面的方法
2017/09/20 Javascript
如何用input标签和jquery实现多图片的上传和回显功能
2018/05/16 jQuery
jQuery模拟12306城市选择框功能简单实现方法示例
2018/08/13 jQuery
从零开始学习搭建React脚手架项目
2018/08/23 Javascript
Vue的属性、方法、生命周期实例代码详解
2019/09/17 Javascript
javascript设计模式 ? 模板方法模式原理与用法实例分析
2020/04/23 Javascript
[01:32]DOTA2上海特锦赛现场采访:最想COS的英雄
2016/03/25 DOTA
linux系统使用python获取内存使用信息脚本分享
2014/01/15 Python
python监控网站运行异常并发送邮件的方法
2015/03/13 Python
星球大战与Python之间的那些事
2016/01/07 Python
Python模拟登陆淘宝并统计淘宝消费情况的代码实例分享
2016/07/04 Python
在pycharm中设置显示行数的方法
2019/01/16 Python
Python3 中作为一等对象的函数解析
2019/12/11 Python
Python-jenkins模块获取jobs的执行状态操作
2020/05/12 Python
使用keras根据层名称来初始化网络
2020/05/21 Python
使用canvas来完成线性渐变和径向渐变的功能的方法示例
2019/07/25 HTML / CSS
美国知名男士服饰品牌:Brooks Brothers(布克兄弟)
2016/08/25 全球购物
社区安全检查制度
2014/02/03 职场文书
经典婚礼主持开场白
2014/03/13 职场文书
效能监察建议书
2014/05/19 职场文书
个人安全生产承诺书
2014/05/22 职场文书
做一个有道德的人活动实施方案
2014/08/23 职场文书
2015年健康教育工作总结
2015/04/10 职场文书
技术员岗位职责范本
2015/04/11 职场文书
2019初中学生入团申请书
2019/06/27 职场文书
前端JavaScript大管家 package.json
2021/11/02 Javascript
Nginx 配置 HTTPS的详细过程
2022/05/30 Servers