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
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

最新文章

  1. thinkphp模板引擎
  2. oracle:case when 语句的区间用法
  3. PHP聊天室框架
  4. How to Avoid OOM in Android
  5. 自动获取UILabel的宽度高度
  6. Android之指南针(电子罗盘)学习
  7. jar文件につぃて
  8. Week 5a - Mouse input and more lists ----mouse input
  9. nginx在 window下 自动退出 php-cgi
  10. 关于better-scroll中的问题点
  11. Python 使用Python远程连接并操作InfluxDB数据库
  12. luajit官方性能优化指南和注解
  13. Python制作二维码和条形码扫描器 (pyzbar)
  14. 基于React 的前端UI开发框架 及与Electron 的结合 https://cxjs.io/
  15. 如何将代码通过vs2017加载到GitHub
  16. asp.net core web项目目录解读
  17. Gradle全局变量定义及引用
  18. spark sql中进行sechema合并
  19. VC获得本机网络连接状态
  20. python网络爬虫技术图谱

热门文章

  1. argc和argv
  2. linux 网卡配置信息
  3. RAC的搭建(三)--Grid的安装
  4. react设置多个className
  5. iOS - 实现语言本地化/国际化
  6. springmvc接收前台(可以是ajax)传来的数组list,map,set等集合,复杂对象集合等图文详解
  7. Web负载均衡与分布式架构
  8. 嵌入式系统C编程之堆栈回溯(二)
  9. VC++中如何复制对话框资源
  10. eagle学习汇总