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. python与VScode

    用VScode写python是非常方便的.vscode是一个功能非常强大的编辑器,下面介绍大致的使用方法: 下载安装python,配置环境变量. 下载安装VScode(vscode会自动连接pytho ...

  2. springboot学习过程笔记

    1.spring-boot-devtools热部署在IDEA中配置后不起作用(Eclipse设置了自动编译,所以不用额外设置) 1).pom.xml添加spring-boot-devtools依赖后 ...

  3. 如何编写一个SQL注入工具

    0x01  前言 一直在思考如何编写一个自动化注入工具,这款工具不用太复杂,但是可以用最简单.最直接的方式来获取数据库信息,根据自定义构造的payload来绕过防护,这样子就可以. 0x02 SQL注 ...

  4. Jsoup(一)-- HelloWorld

    1.简介 jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址.HTML文本内容.它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据. ...

  5. DDMS调试信息

    1.可以使用System.out.println() 2.android.util包下的Log类 该类可以将信息以日志的形式输出到LogCat中: import android.util.Log; S ...

  6. link常用的作用

    1 引入样式 2设置网页标题上面图标

  7. JSPatch 部署安全策略

    本文转载至 http://blog.cnbang.net/tech/2879/ 使用 JSPatch 有两个安全问题: 传输安全:JS 脚本可以调用任意 OC 方法,权限非常大,若被中间人攻击替换代码 ...

  8. 《MySQL》一次MySQL慢查询导致的故障

    本文转载自 http://www.jb51.net/article/70955.htm 我们知道分析MySQL语句查询性能的方法除了使用EXPLAIN 输出执行计划,还可以让MySQL记录下查询超过指 ...

  9. Clock skewdetected. Your build may be incomplete.

    解决方法: find . -type f | xargs -n touch make clean make

  10. Nginx七层反向代理和负载均衡

    1.介绍 1.1 Nginx不仅是一个出色的web软件,其七层代理和负载均衡也是相当出色.Nginx做前端代理,当用户请求服务时,可以根据url进行判断,然后分配到不同的后台webserver上. 1 ...