目录

  • 统一概念
    • 标准时间
    • 时区
    • 时间戳
    • 字符串表示
  • Python中的时间处理 - Arrow
    • 为什么使用Arrow?
    • 功能
    • 快速入门
      • 安装
      • 用法示例
      • 实例代码
      • 参考
  • 其他语言处理方式参考:
  • 外链

统一概念

首先先理解一些通用的概念。

标准时间

  • 可以理解为世界时间,不存在时区问题
  • utc:(Universal Time Coordinated),协调世界时。全世界统一的世界标准时间。需要不规则地加入闰秒。
  • GMT:(Greenwich Mean Tim),格林尼治平均时间。
    • 一般认为UTC和GMT是相等的,但是会存在0.9秒以内的误差,这是由于地球不规则自转引起的。

时区

  • 人类的生存规则日出而作日落而息,对时间的定义亦是如此;但是全世界日出日落并不在同一时刻,所以就出现了时差问题; 为了方便计算时差问题而推出的世界时区规则 UTC +/-。
  • 本地时间:,UTC+时区,东为正西为负。比如北京时间在东八区就是 UTC+(+0800)。
  • DST:,夏令时。是指夏天太阳升起比较早,将时钟拨快一个小时来提早日光的使用。欧美主要国家都引用了这个做法。如果在夏令时时区内 DST=UTC+时区+1。

时间戳

  • 由UTC世界标准时间转换而来,不带时区;同一时刻获取的时间戳在全世界都是相同的。
  • Unix时间戳: 表示从UTC1970年1月1日0时0分0秒起至现在的总秒数,不考虑闰秒
  • 时间戳: 表示从UTC1970年1月1日0时0分0秒起至现在的毫秒数。

字符串表示

为了让时间易于阅读又出现了用各种字符串来表示时间的方法。
RFC2822 官方白皮书:https://tools.ietf.org/html/rfc2822#page-14

YYYY/MM/DD HH:MM:SS ± timezone(时区用4位数字表示)
//  1992/02/12 12:23:22+0800

ISO 8601 维基百科:https://zh.wikipedia.org/wiki/ISO_8601

YYYY-MM-DDThh:mm:ss ± timezone(时区用HH:MM表示)1997-07-16T08:20:30Z
// “Z”表示UTC标准时区,即"00:00",所以这里表示零时区的`1997年7月16日08时20分30秒`
// 日期时间合并表示时,要在时间前面加一大写字母T// 如要表示东八区时间2004年5月3日下午5点30分8秒,可以写成
2004-05-03T17:30:08+08:00
20040503T173008+08

Python中的时间处理 - Arrow

为什么使用Arrow?

Python的标准库和其他一些底层模块具有几乎完整的日期,时间和时区功能,但是从可用性的角度来看效果并不理想:

  • 太多模块:日期时间,时间,日历,dateutil,pytz等
  • 类型太多:日期,时间,日期时间,tzinfo,timedelta,relativedelta等。
  • 时区和时间戳转换冗长且令人不快
  • 时区朴素是常态
  • 功能上的差距:ISO 8601解析,时间跨度,人性化

功能

  • 完全实现的日期时间的直接替换
  • 支持Python 2.7、3.5、3.6、3.7和3.8
  • 默认为时区感知和UTC
  • 为许多常见的输入方案提供超简单的创建选项
  • shift 支持相对偏移量(包括周)的方法-
  • 自动格式化和解析字符串
  • 广泛支持ISO 8601
  • 时区转换
  • 时间戳记可作为属性使用
  • 生成时间范围,范围,下限和上限,以显示从微秒到年的时间范围
  • 人性化并支持不断增加的贡献区域列表
  • 可扩展为您自己的箭头衍生类型
  • 只动识别夏令时

快速入门

安装

要安装Arrow,请使用pip或pipenv:

$ pip install -U arrow

用法示例

>>> import arrow # 获得标准时
>>> utc = arrow.utcnow()
>>> utc
<Arrow [2018-11-13T13:34:28.469607+00:00]># 时区转换
>>> local = utc.to("Asia/Shanghai")
<Arrow [2018-11-13T21:36:41.001464+08:00]># 比较
>>> utc > utc.shift(hour=-1)
True# 字符串转换
>>> arrow.get('2013-05-11T21:23:58.970460+00:00')
<Arrow [2013-05-11T21:23:58.970460+00:00]># 格式化输出
>>> local.format('YYYY-MM-DD HH:mm:ss ZZ')
'2018-11-13 21:36:41 +08:00'# 可读性
>>> local.humanize()
'an hour ago'
>>> local.humanize(locale='zh')
'1小时前'# 时间戳
>>> utc.timestamp
1542116201

实例代码

import arrow
from datetime import datetime
import pytzdef test_demo():"""arrow 实例:return:"""# 获取当前utc时间(世界时间)utc = arrow.utcnow()print("当前世界时间:%s" % utc)  # 2020-04-19T06:31:29.595262+00:00# 减去一小时utc_h = utc.shift(hours=-1)print("当前世界时间减去一小时:%s" % utc_h)  # 2020-04-19T05:31:29.595262+00:00# 传入时区('Asia/Shanghai')北京时间,打印的时间是加8小时后的local = utc.to('Asia/Shanghai')print("北京当前时间:%s" % local)  # 2020-04-19T14:31:29.595262+08:00# 转换成时间戳(单位秒),此处注意只有带时区的时间信息转换后的时间戳才是正确的;timestamp = local.timestampprint("UTC 时间戳:%s" % timestamp)  # 1587278432# 显示格式转换form = local.format()  # 默认格式:"YYYY-MM-DD HH:mm:ss ZZ"print("带时区信息的北京时间:%s" % form)  # 2020-04-19 14:43:50+08:00form = local.format("YYYY-MM-DD HH:mm:ss")print("格式化后的北京时间:%s" % form)  # 2020-04-19 14:43:50def test_arrow_now():"""arrow.now() 使用:return:"""# 获取当前utc时间(世界时间)utc = arrow.utcnow()print(utc)  # 2020-04-19T06:31:29.595262+00:00# 获取当期时间(本地时间),不指定时区时默认本机时区,自动识别本机时区;utc = arrow.now()print(utc)  # 2020-04-19T14:50:26.412411+08:00# 自定义时区 ‘America/St_Johns’加拿大时区utc = arrow.now(tz='America/St_Johns')print(utc)  # 2020-04-19T04:26:01.613671-02:30def test_arrow_get():"""arrow.get() 使用:return:"""# 时间戳转换日期格式,默认转换为utc世界时间,反转请看demo02utc = arrow.get(1587280058)  # 秒级print(utc)  # 2020-04-19T06:56:01+00:00utc = arrow.get(1587280058.2278044)  # 毫秒级print(utc)  # 2020-04-19T07:07:38.227804+00:00# 支持传入datetime类型,arrow对datetime支持非常友好,此处不一一列举;utc = arrow.get(datetime.utcnow())print(utc)  # 2020-04-19T07:07:38.227804+00:00# arrow 格式转datetimea = arrow.utcnow()var = a.datetimeprint(type(var))  # <class 'datetime.datetime'># 字符串格式日期,转arrow 日期格式arrow_time = arrow.get('2020-04-19 07:30:45', 'YYYY-MM-DD HH:mm:ss')print(arrow_time)  # 2020-04-19T07:30:45+00:00arrow_time = arrow.get('2020-04-19T07:30:45.000-07:00')print(arrow_time)  # 2020-04-19T07:30:45-07:00arrow_time = arrow.get(2020, 4, 19)print(arrow_time)  # 2020-04-19T00:00:00+00:00def demo01():"""北京时间转加拿大纽芬兰时区时间计算公式:北京时间 = 世界时间 + 8小时加拿大纽芬兰时区时间 = 世界时间 - 3:30小时加拿大纽芬兰时区夏令时时间 = 北京时间 - 8小时 - 3:30小时 + 1小时:return:"""# 加拿大有很多时区,我们这里选择纽芬兰时区timezone = "America/St_Johns"# 北京时间timestr = "2020-04-19 16:19:48"# 此处重点注意:# 1,get()只能用来做格式转换,不能进行时区转换,转换需要使用to()方法# 2,北京时间不能直接进行转换,需要使用replace()指定传入时间的时区a_time = arrow.get(timestr, 'YYYY-MM-DD HH:mm:ss').replace(tzinfo='Asia/Shanghai')# arrow会自动识别时区是否进入夏令时,进入后会自动+1jnd_time = a_time.to(tz=timezone)print(jnd_time)  # 2020-04-19T05:49:48-02:30 加拿大夏令时时间return jnd_timedef demo02():"""北京时间转时间戳时间戳的定义:表示当前时间到1970年1月1日00:00:00 UTC对应的毫秒数;重点:UTC (世界协调时)对应的秒数,不是北京时间对应的秒数;:return: UTC 时间戳(秒)"""# 北京时间timestr = "2020-04-19 16:19:48"# 此处重点注意:北京时间不能直接进行时间戳转换,需要使用replace()指定传入时间的时区,或者timestr中带上时区a_time = arrow.get(timestr, 'YYYY-MM-DD HH:mm:ss').replace(tzinfo='Asia/Shanghai')time = a_time.timestampprint(time)  # 1587284388return timedef get_timezone():"""使用python内置库pytz 获取时区库(pytz:python内置时区库):return: 时区列表"""# 获取指定国家的时区iso3166_code国家代码对照表,加拿大Canada:catz = pytz.country_timezones(iso3166_code='CA')print(tz[0])# 获取全部时区# tz = pytz.all_timezonesreturn tzif __name__ == '__main__':test_demo()

参考

官方地址: https://arrow.readthedocs.io/en/latest/

其他语言处理方式参考:

JavaScript: https://segmentfault.com/a/1190000007581722

外链

时间网:http://www.shijian.cc/
时差:https://www.zeitverschiebung.net/cn/
未完待续…

python时区运算,时区,时间戳,夏令时讲解相关推荐

  1. python语言arrows用法_python时区运算,时区,时间戳,夏令时讲解

    import arrow from datetime import datetime import pytz def test_demo(): """ arrow 实例 ...

  2. 时间那点儿事儿 -- 时间戳,时区,冬令时,夏令时

    关于时间的那点儿事儿 -- 时间戳,时区,冬令时,夏令时 UTC.GMT.PST,冬令时.夏令时 看起来是不是很懵,看完本文后相信关于时间你会有一个清醒的认知. 时间按照不同的角度可以划分为: 时间戳 ...

  3. Python学习之datetime时间戳

    众所周知,Python提供的用于处理日期和时间的标准模块名为datetime. 记录当前时间戳的常用方法为 >>> import datetime >>> date ...

  4. Python获取秒级时间戳与毫秒级时间戳

    协调世界时 又称世界统一时间.世界标准时间.国际协调时间,简称UTC. 在计算机中,时间实际上是用数字表示的.我们把1970年1月1日 00:00:00 UTC+00:00时区的时刻称为epoch t ...

  5. 跟着王进老师学开发Python篇:基础入门案例讲解-王进-专题视频课程

    跟着王进老师学开发Python篇:基础入门案例讲解-166人已学习 课程介绍         共计45个项目案例+项目源码,跟着王进老师尽情玩转Python解释器! 本课程涉及Python的基础语法, ...

  6. 视频教程-跟着王进老师学开发Python篇:基础入门案例讲解-Python

    跟着王进老师学开发Python篇:基础入门案例讲解 教学风格独特,以学员视角出发设计课程,难易适度,重点突出,架构清晰,将实战经验融合到教学中.讲授技术同时传递方法.得到广大学员的高度认可. 王进 ¥ ...

  7. Python的零基础超详细讲解(第十三天)-Python的类与对象

    基础篇往期文章如下: Python的零基础超详细讲解(第一天)-Python简介以及下载 Python的零基础超详细讲解(第二天)-Python的基础语法1 Python的零基础超详细讲解(第三天)- ...

  8. Python的零基础超详细讲解(第七天)-Python的数据的应用

    往期文章 Python的零基础超详细讲解(第一天)-Python简介以及下载_编程简单学的博客-CSDN博客 Python的零基础超详细讲解(第二天)-Python的基础语法1_编程简单学的博客-CS ...

  9. Python的零基础超详细讲解(第五天)-Python的运算符

    往期文章 Python的零基础超详细讲解(第一天)-Python简介以及下载_编程简单学的博客-CSDN博客 Python的零基础超详细讲解(第二天)-Python的基础语法1_编程简单学的博客-CS ...

最新文章

  1. matlab中fliter函数,用C语言实现MATLAB中Filter()函数
  2. Mysql基于GTIDs的复制
  3. Yunyang tensorflow-yolov3 voc_train.txt以及voc_test.txt引用的路径位置
  4. react-native 单位换算(px,pt,dp,ppi)
  5. 将AX寄存器中的16位数据分成4组(从高到低),每组4位,然后把这4组数作为数当中的低4位分别放在AL,BL,CL,DL中。
  6. python中xy坐标如何从十个中找到最远的两个_python – Opencv单应性从像素xy坐标中查找全局xy坐标...
  7. 公众号管理模块-DouPHP模块化企业网站管理系统v1.6
  8. torch.cuda.is_aviaiable() 返回值为False的问题
  9. atom配置python环境_用Python制作网站Django实操与开发环境配置
  10. 智能云输入法 卸载残留问题
  11. Red Rover 简单字符串应用
  12. 坦克大战Netty网络联机版项目笔记
  13. slackware下ibus编译安装(更新:2010/10/17)
  14. 用Multisim13.0进行混频器的仿真
  15. shell 输出7的倍数
  16. macos系统镜像iso_系统原装ISO镜像软碟通刻录启动U盘教程
  17. Nginx反向代理实现负载均衡配置图解
  18. c语言难学吗?怎么学C语言?
  19. webpack打包压缩混淆_前端打包利器:webpack工具
  20. Qt 串口数据采集并绘图

热门文章

  1. Python编程好不好学?入门难吗?
  2. PDF文件太大了,如何免费压缩变小?
  3. canvas应用——圆角矩形图片
  4. 求最大公约数c语言实验心得,C语言编程实训报告(合集)
  5. Hadoop实例学习(八)全排序和区排序
  6. 斑马打印机打印不出来字怎么解决
  7. rimraf 命令快速删除 node_modules 包
  8. 更换固态硬盘并使用微pe安装windows7系统及万能网卡
  9. 2018铁三测评题write以及一些想送给你们的话
  10. 再次出发!FaceBook 开源“一站式服务“时序利器 Kats !