python中arrow处理日期
Arrow-一个最好用的日期时间Python处理库
写过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.get("2021-9-9", tzinfo=timezone.utc) # 设置时区为utc
- 从时间戳转化为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]>
- 直接创建arrow对象
>>> arrow.get(2018, 2, 24)
<Arrow [2018-02-24T00:00:00+00:00]>
>>> arrow.Arrow(2018, 2, 24)
<Arrow [2018-02-24T00:00:00+00:00]>
- arrow对象属性
datetime
,timestamp
,native
,tzinfo
>>> a = arrow.utcnow()
>>> a.datetime
datetime.datetime(2018, 2, 24, 21, 15, 50, 841056, tzinfo=tzlocal())
>>> a.timestamp
1519478150
>>> a.naive
datetime.datetime(2018, 2, 24, 21, 58, 4, 309575)
>>> a.tzinfo
tzlocal()
- 按名称或tzinfo转换为时区
>>> arw = arrow.utcnow()
>>> arw
<Arrow [2018-06-07T11:16:51.695083+00:00]>
>>> arw.to('US/Pacific')
<Arrow [2018-06-07T04:16:51.695083-07:00]>
- 获取datetime对象的值
>>> a = arrow.now()
>>> a
<Arrow [2018-06-07T17:44:43.519166+08:00]>
>>> a.year # 当前年
2018
>>> a.month # 当前月份
6
>>> a.day # 当前天
7
>>> a.hour # 当前第几个小时
17
>>> a.minute # 当前多少分钟
44
>>> a.second # 当前多少秒
43
>>> a.timestamp # 获取时间戳
1528364683
>>> a.float_timestamp # 浮点数时间戳
1528364683.519166
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构