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

目录
  • 前言
  • 1. pytz 模块概述
    • 什么是 pytz 模块
    • 国家时区映射关系表
    • pytz 模块使用方法
  • 2. pytz 相关方法
  • 3. pytz 时区查询
  • 4. pytz 日期计算
  • 总结

前言

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

  • 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
---

总结

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

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

(0)

相关推荐

  • Python时区设置方法与pytz查询时区教程

    时区的概念与转换 首先要知道时区之间的转换关系,其实这很简单:把当地时间减去当地时区,剩下的就是格林威治时间了. 例如北京时间的18:00就是18:00+08:00,相减以后就是10:00+00:00,因此就是格林威治时间的10:00.而把格林威治时间加上当地时区,就能得到当地时间了. 例如格林威治时间的10:00是10:00+00:00,转换成太平洋标准时间就是加上-8小时,因此是02:00-08:00.而太平洋标准时间转换成北京时间转换也一样,时区相减即可. 例如太平洋标准时间的02:00-

  • pytz格式化北京时间多出6分钟问题的解决方法

    起步 在django框架中,用的是 pytz 库处理时区问题,所以我也尝试用这个库来处理.但发现了一个奇怪的问题: import datetime import pytz dt = datetime.datetime(2019,6,20, 12, tzinfo=pytz.timezone('Asia/Shanghai')) print(dt) # 2019-06-20 12:00:00+08:06 为什么多出了 6 分钟来? 原因 这是因为 pytz 里保存是本地时间. fmt = '%Y-%m

  • Python用模块pytz来转换时区

    前言 最近遇到了一个问题:我的server和client不是在一个时区,server时区是EDT,即美国东部时区,client,就是我自己的电脑,时区是中国标准时区,东八区.处于测试需要,我需要向server发送一个时间,使得server在这个时间戳去执行一些动作.这个时间戳通常是当前时间加2分钟或者几分钟. 通常美东在夏令时时,和我们相差12小时,所以直接减掉这12小时,然后再加两分钟,可以实现发送基于server的时间戳,但是只有一半时间是夏令时,所以考虑还是基于时区来做.百度了一下,Pyt

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

    目录 前言 1. pytz 模块概述 什么是 pytz 模块 国家时区映射关系表 pytz 模块使用方法 2. pytz 相关方法 3. pytz 时区查询 4. pytz 日期计算 总结 前言 在我们日常生活中,时间概念常伴我们左右.让我们简单的回忆一下自己的一天,大致有以下时间点: 8:00,清晨的阳光照射到床头伴着闹钟,你从睡眠中清醒 8:30,你洗漱完成换好工装,出门上班 9:00,准时坐到工位上,开始一天的工作 12:00,吃午饭午休 14:00,开始下午的工作 ....,时间无处不在

  • Python自动操作Excel文件的方法详解

    目录 工具 读取Excel文件内容 写入Excel文件内容 Excel文件样式调整 设置表头的位置 设置单元格的宽高 总结 工具 python3.7 Pycharm Excel xlwt&xlrd 读取Excel文件内容 当前文件夹下有一个名为“股票数据.xlsx”的Excel文件,可以按照下列代码方式来操作它. import xlrd # 使用xlrd模块的open_workbook函数打开指定Excel文件并获得Book对象(工作簿) wb = xlrd.open_workbook('股票数

  • python编程开发时间序列calendar模块示例详解

    目录 calendar模块 设置每周第一天-setfirstweekday 1.默认情况:礼拜一是第一天 2.设置任意一天 是否闰年-isleap 年份间的闰年数-leapdays(y1, y2) 星期几-weekday(year, month, day) monthrange(year, month) 月的日历矩阵-monthcalendar(year, month) 月的日历-prmonth(year, month, w, l) 年的日历-calendar.calendar(year) 格式

  • Python标准库之Sys模块使用详解

    sys 模块提供了许多函数和变量来处理 Python 运行时环境的不同部分. 处理命令行参数 在解释器启动后, argv 列表包含了传递给脚本的所有参数, 列表的第一个元素为脚本自身的名称. 使用sys模块获得脚本的参数 复制代码 代码如下: print "script name is", sys.argv[0]        # 使用sys.argv[0]采集脚本名称 if len(sys.argv) > 1:     print "there are",

  • python时间与Unix时间戳相互转换方法详解

    对于时间数据,如2018-09-25 09:28:59,有时需要与Unix时间戳进行相互的运算,此时就需要对两种形式进行转换,在Python中,转换时需要用到time模块,具体的函数如下: 其中unix_time函数是正常时间转unix时间,local_time是unix时间转正常时间. import time def unix_time(dt): #转换成时间数组 timeArray = time.strptime(dt, "%Y-%m-%d %H:%M:%S") #转换成时间戳 t

  • Python代码缩进和测试模块示例详解

    前言 Python代码缩进和测试模块是大家学习python必不可少的一部分,本文主要介绍了关于Python代码缩进和测试模块的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 一.Python代码缩进 Python 函数没有明显的 begin 和 end ,没有标明函数的开始和结束的花括号.唯一的分隔符是一个冒号 ( : ),接着代码本身是缩进的. 例如:缩进 buil dCon necti onStr ing 函数 def buildConnectionString(

  • python中sklearn的pipeline模块实例详解

    最近在看<深度学习:基于Keras的Python实践(魏贞原)>这本书,书中8.3创建了一个Scikit-Learn的Pipeline,首先标准化数据集,然后创建和评估基线神经网络模型,代码如下: # 数据正态化,改进算法 steps = [] steps.append(('standardize', StandardScaler())) steps.append(('mlp', model)) pipeline = Pipeline(steps) kfold = KFold(n_splits

  • 对Python信号处理模块signal详解

    Python中对信号处理的模块主要是使用signal模块,但signal主要是针对Unix系统,所以在Windows平台上Python不能很好的发挥信号处理的功能. 要查看Python中的信号量,可以使用dir(signal)来查看. signal.signal() 在signal模块中,主要是使用signal.signal()函数来预设信号处理函数 singnal.signal(signalnum, handler) 其中第一个参数是信号量,第二个参数信号处理函数. 下面看个简单的例子,其中

  • Python之os模块案例详解

    OS模块 import os 1.返回操作系统类型 :posix 是linux操作系统,nt 是windows操作系统 print(os.name) print('Linux' if os.name == 'posix' else 'Windows') posix Linux 2.操作系统的详细信息 info = os.uname() print(info) print(info.sysname) print(info.nodename) posix.uname_result(sysname='

  • python logging日志模块的详解

    python logging日志模块的详解 日志级别 日志一共分成5个等级,从低到高分别是:DEBUG INFO WARNING ERROR CRITICAL. DEBUG:详细的信息,通常只出现在诊断问题上 INFO:确认一切按预期运行 WARNING:一个迹象表明,一些意想不到的事情发生了,或表明一些问题在不久的将来(例如.磁盘空间低").这个软件还能按预期工作. ERROR:更严重的问题,软件没能执行一些功能 CRITICAL:一个严重的错误,这表明程序本身可能无法继续运行 这5个等级,也

随机推荐