https://www.jianshu.com/p/c878bb1c48c1

写过Python程序的人大都知道,Python日期和时间的处理非常繁琐和麻烦,主要有以下几个问题:

  • 有众多的package,类和方法,包括time,datetime,pytz等等
  • 经常需要各种转换,比如时间戳,structtime,时间字符串之间相互转换,localtime和utctime的转换
  • 难以记忆,有违人性的时间格式化字符串%Y %M %m %D %d

基于以上几点,每次做时间处理的时候总是需要翻看以前的代码或者文档,可见此处Python做的有多烂,好了废话不多说,今天给大家介绍的这个arrow极大地解放了我等Python程序员的脑容量。

安装

pip install arrow

使用

获取当前时间
In [13]: import arrow

In [14]: t = arrow.utcnow()

In [15]: t
Out[15]: <Arrow [2017-02-01T08:30:37.627622+00:00]> In [19]: arrow.now()
Out[19]: <Arrow [2017-02-01T16:32:02.857411+08:00]>

通过utcnow()和now()分别获取了utc时间和local时间,最终获取的是一个Arrow时间对象,通过这个对象我们可以做各种时间转换,后边会看到。

时间形式转换

我们经常需要转换时间对象,比如转换称timestamp,有时需要转换成特定格式的时间字符串。

  • 转换成timestamp
In [13]: import arrow

In [14]: t = arrow.utcnow()

In [16]: t.timestamp
Out[16]: 1485937837
  • 转换成时间字符串
In [23]: t = arrow.now()

In [24]: t.format()
Out[24]: u'2017-02-01 17:00:42+08:00' In [25]: t.format("YYYY-MM-DD HH:mm")
Out[25]: u'2017-02-01 17:00'

怎么样?是不是感觉很简单,心里感觉轻舒了一口气!这里可以注意到格式化字符串非常人性化便于记忆,对不对?完整的时间格式字符串参见这里

  • 从字符串转换成Arrow对象
In [20]: arrow.get("2017-01-20 11:30", "YYYY-MM-DD HH:mm")
Out[20]: <Arrow [2017-01-20T11:30:00+00:00]>
  • 从时间戳转化为Arrow对象
In [26]: arrow.get("1485937858.659424")
Out[26]: <Arrow [2017-02-01T08:30:58.659424+00:00]> In [27]: arrow.get(1485937858.659424)
Out[27]: <Arrow [2017-02-01T08:30:58.659424+00:00]>

注意这里无论传递的是时间戳字符串还是float类型的时间戳都可以进行转化,很人性有木有?

  • 直接生成Arrow对象
In [28]: arrow.Arrow(2017, 2, 1)
Out[28]: <Arrow [2017-02-01T00:00:00+00:00]> In [29]: arrow.get(2017, 2, 1)
Out[29]: <Arrow [2017-02-01T00:00:00+00:00]>
时间推移

时间推移就是要获取某个时间之前的时间或者之后的时间,比如要获取相对于当前时间前一天的时间。

In [30]: t = arrow.now()
In [31]: t
Out[31]: <Arrow [2017-02-01T17:19:19.933507+08:00]> In [33]: t.shift(days=-1) # 前一天
Out[33]: <Arrow [2017-01-31T17:19:19.933507+08:00]> In [34]: t.shift(weeks=-1) # 前一周
Out[34]: <Arrow [2017-01-25T17:19:19.933507+08:00]> In [35]: t.shift(months=-2) # 前两个月
Out[35]: <Arrow [2016-12-01T17:19:19.933507+08:00]> In [37]: t.shift(years=1) # 明年
Out[37]: <Arrow [2018-02-01T17:19:19.933507+08:00]>

看是不是很简单,比用timedelta要简单明了多了,是不是?

更多请参考官方文档和Github
官方文档
Github
顺便说一句点赞是一种美德,Arrow第4000个赞就是我点的,哈哈。如果你觉的我的文章有帮助,也赶紧点个赞吧!

作者:geekpy
链接:https://www.jianshu.com/p/c878bb1c48c1
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

Arrow-一个最好用的日期时间Python处理库的更多相关文章

  1. paip.日期时间操作以及时间戳uapi php java python 总结

    paip.日期时间操作以及时间戳uapi php java python 总结 ///uapi Date 函数 | Day 函数 | Hour 函数 | Minute 函数 | Month 函数 | ...

  2. Python与SQLite日期时间函数的使法

    SQLite的时间函数跟Python的时间函数有些许差别,所以稍做记录,供自己以后查询. 网上有将SQLite官方WIKI内容翻译成中文的文章,大家有兴趣可以搜索一下,我这里单纯记录一下个人比较常用的 ...

  3. Python入门系列(八)日期时间、数学、json

    日期时间 Python中的日期本身不是数据类型,但我们可以导入一个名为datetime的模块,将日期作为日期对象使用. import datetime x = datetime.datetime.no ...

  4. 【转】JAVA 8 日期/时间(Date Time)API指南

    前言 本来想写下Java 8的日期/时间API,发现已经有篇不错的文章了,那就直接转载吧~ PS:主要内容没变,做了部分修改. 原文链接: journaldev 翻译: ImportNew.com - ...

  5. Javascript 日期时间格式正则

    因为Javascript的日期格式判断可能因浏览器的版本有所不同,所以用正则判断会比较好,这里备注一个正则用来判断日期时间的格式: ^(?=\d)(?:(?!(?:1582(?:\.|-|\/)10( ...

  6. 【Bootstrap】bootstrap-datetimepicker日期时间插件

    [bootstrap-datetimepicker] datetimepicker是一个比较方便的日期时间插件.有了这个之后,我们可以在类似于表单的地方提供一个友好的日期(时间)输入功能.官方文档:[ ...

  7. ASP.NET MVC下使用AngularJs语言(九):日期时间处理与显示

    当在angularjs去显示一个时间时,如原原本本去显示这个值,它将显示一个怪怪的字符串,其实它就是被系列化json之后的字符串.如:一个空值显示为日期时间: 如果非空值显示为日期时间的情形: 为了能 ...

  8. Java8学习笔记(九)--日期/时间(Date Time)API指南

    Java 8日期/时间( Date/Time)API是开发人员最受追捧的变化之一,Java从一开始就没有对日期时间处理的一致性方法,因此日期/时间API也是除Java核心API以外另一项倍受欢迎的内容 ...

  9. Laravel 日期时间处理包 Carbon 的应用

    在编写 PHP 应用时经常需要处理日期和时间,这篇文章带你了解一下 Carbon – 继承自 PHP DateTime 类的 API 扩展,它使得处理日期和时间更加简单.Laravel 中默认使用的时 ...

随机推荐

  1. 把mongodb服务添加到系统服务中,报错:[sc] openscmanager 失败 5

    添加mongodb系统服务命令如下: sc create MongoDB binPath= "D:\MongoDB\bin\mongod.exe --service --dbpath D:\ ...

  2. 转换python脚本为可执行程序的方式

    背景: 部分工具使用python脚本编写,而目标服务器,没有安装python包,导致使用工具不方便,还需要另外安装python. 目前主要有2个主流软件,可做此类转换,把对应工具脚本转换为exe: p ...

  3. Spring中神奇@aotuWrited

    好久没有写博客了,放假就是充电学习的时候,的确一直是这样做的.来给自己一点掌声.我们还是进入今天的主题吧. 我们自己写代码一般会向下面这样干啊,因为这样简单,其余交给spring去做吧.Spring会 ...

  4. 【安全开发】Android安全编码规范

    申明:本文非笔者原创,原文转载自:https://github.com/SecurityPaper/SecurityPaper-web/blob/master/_posts/2.SDL%E8%A7%8 ...

  5. 使用dshow捕获摄像头图像

    #include "stdafx.h" #include <DShow.h> #include <Guiddef.h> #include <strmi ...

  6. jenkins构建的robot result结果不更新

    描述:构建的结果不进行更新,仍然显示以往的构建结果 定位原因:pybot 命令中生成的结果文件保存路径与构建后robot结果显示路径不一致所致 解决办法:修改二者的结果保存路径一致

  7. 深入理解tomcat9---源码构建

    环境准备: tomcat9源码 maven(bin目录加入path系统环境变量) jdk8 idea 源码构建步骤: 1. 在解压缩的源码目录下新建pom.xml文件,内容如下: <?xml v ...

  8. Android 自动化测试 robotium

    转:http://xiaomaozi.blog.51cto.com/925779/908886 Android 的开发可以说已经遍地都是,不说精致的app,只要看些书,看点教学视频,学习二至三个月,都 ...

  9. Linux 安装Ruby详解(在线和离线安装)

    很多时候我们会发现,真实的生成环境很多都没有外网,只有内网环境,这个时候我们又需要安装Ruby,则不能提供yum命令进行在线安装了,这个时候我们就需要下载安装包进行离线安装.本文主要简单介绍如果离线安 ...

  10. 题目1459:Prime ring problem(素数环问题——递归算法)

    题目链接:http://ac.jobdu.com/problem.php?pid=1459 详解链接:https://github.com/zpfbuaa/JobduInCPlusPlus 参考代码: ...