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模块使用详解

关于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
---

来源:https://juejin.cn/post/7108749634863890468

标签:Python,pytz模块
0
投稿

猜你喜欢

  • vue3配置全局参数(挂载全局方法)以及组件的使用

    2023-07-02 16:45:46
  • python用来获得图片exif信息的库实例分析

    2022-07-16 12:29:38
  • mysql中使用replace替换某字段的部分内容

    2024-01-20 14:43:39
  • Python二叉树初识(新手也秒懂!)

    2022-10-09 13:03:36
  • jquery 将disabled的元素置为enabled的三种方法

    2024-04-19 10:19:14
  • javascript 缓冲效果实现代码 推荐

    2024-04-29 13:36:08
  • 使用python绘制温度变化雷达图

    2021-06-23 05:44:02
  • Go语言实现socket实例

    2024-02-04 20:17:30
  • JSP JavaBean的setProperty属性

    2023-07-10 19:58:11
  • 解决Pyinstaller打包为可执行文件编码错误的问题

    2021-06-30 20:47:46
  • nginx搭建基于python的web环境的实现步骤

    2023-07-27 07:06:49
  • oracle日期分组查询的完整实例

    2023-06-26 10:14:13
  • python要安装在哪个盘

    2022-10-09 13:16:52
  • 纯JS实现动态时间显示代码

    2024-05-02 17:31:34
  • Python还能这么玩之用Python做个小游戏的外挂

    2022-12-11 18:27:43
  • Python使用多进程运行含有任意个参数的函数

    2023-10-14 23:22:12
  • Pandas标记删除重复记录的方法

    2022-04-26 13:53:31
  • 用CSS实现柱状图(Bar Graph)的方法(三)——复杂柱状图的实现

    2008-05-26 13:36:00
  • sql server关键字详解大全(图文)

    2024-01-14 09:43:13
  • 使用virtualenv创建Python环境及PyQT5环境配置的方法

    2022-12-30 06:09:26
  • asp之家 网络编程 m.aspxhome.com