原文链接:https://opensource.com/article/18/4/python-datetime-libraries
七个Python时间日期库:
● datetime(内建模块)
● dateutil
● arrow
● moment
● maya
● delorean
● freezegun
案例:
如果我们拿到包含时间的字符串:'2018-04-29T17:45:25Z'
这个字符串包括(因为比较好理解,放上原文):
- The date in YYYY-MM-DD format
- The letter "T" to indicate that a time is coming
- The time in HH:II:SS format
- A time zone designator "Z," which indicates this time is in UTC (read more about datetime string formatting)
我们怎么将其转换为日期对象呢?
我们依次用上面提到的各模块来实现。
1、datetime
代码如下:
from datetime import datetime
datetime.strptime('2018-04-29T17:45:25Z', '%Y-%m-%dT%H:%M:%SZ')
在Jupyter中运行的结果为:
其中,逗号左边的 '2018-04-29T17:45:25Z' 和 右边的'%Y-%m-%dT%H:%M:%SZ',对应关系如下:
- 四位数的年份2018,对应%Y;
- 两位数的月份04,对应%m;
- 两位数的日期29,对应%d;
- 英文字母T,对应T,代表将要到来的时间;
- 两位数的小时17,对应24小时制的%H;
- 两位数的分钟45,对应%M;
- 两位数的秒钟25,对应%S;
- 英文字母Z,对应Z,该时区指示符“Z”,表示是UTC时间
2、dateutil
代码如下,会比之前写起来简单:
from dateutil.parser import parse
parse('2018-04-29T17:45:25Z')
在Jupyter中运行的结果为:
dateutil解析后可以自动返回字符串的时区,如果你想忽略时区信息,则增加参数 ignoretz=True,
还可以解析如下格式的日期型字符串,
3、arrow
如果import报错,则证明没有这个模块,可以打开Anaconda的prompt,用pip install arrow即可安装该模块。
装完后,运行以下代码:
import arrow
arrow.get('2018-04-29T17:45:25Z')
在Jupyter中运行的结果为:
要获取 Python datetime对象,则代码在加上datetime,如下:
你可以在Arrow文档中获得更多有用的方法,例如,它的manualize()方法将日期时间转换为人类可读的短语,如下所示(和原文展示的不一样了,但意思接近):
4、moment
运行以下代码:
import moment
moment.date('2018-04-29T17:45:25Z')
在Jupyter中运行的结果为:
要获取 Python datetime对象,也是在代码最后加上datetime,如下:
moment能识别时间方面的常用英文单词,如:
加一段代码“add(days=1)”,就可以获得明天这个点的时间(若要昨天的时间,则add(days=-1)):
5、maya
运行以下代码,获得maya格式的时间:
import maya
maya.parse('2018-04-29T17:45:25Z')
要获取 Python datetime对象,则是在代码最后加上datetime(),如下:
同样,加上一段代码“slang_time()”,就可以转为人类的语言:
6、delorean
delorean,名字取自电影《Back to the Future》中用来时间旅行的那辆车,就是想表达它在处理时间类数据时特别厉害!
但它需要一个有效的python时间对象,即比如需要和上面的maya一起使用,输入以下代码:
import maya
d_t = maya.parse('2018-04-29T17:45:25Z').datetime()
from delorean import Delorean
d = Delorean(d_t)
d
在Jupyter中运行的结果为:
我们可以用代码“d.shift('US/Eastern')”,把日期时间转换为美国东部时区,则以下红框中的数字就有变化了:
如果我们要获得2018年4月29日之后的下个星期五,则输入“d.next_friday()”即可:
更多内容,请点击链接:https://delorean.readthedocs.io/en/latest/
7、freezegun
它是可以帮助你在Python代码中测试特定日期的库。使用@freeze_time装饰器,你可以设置测试条件下的具体日期和时间,所有datetime.datetime.now()、datetime.datetime.utcnow()等,都会返回你指定的日期和时间。例如:
from freezegun import freeze_time
import datetime
@freeze_time("2017-04-14")
def test():
assert datetime.datetime.now() == datetime.datetime(2017, 4, 14)
在Jupyter中运行的结果为:
更多介绍,请转此链接查看:https://github.com/spulec/freezegun
感觉以上内容不错,就作为笔记,以备将来需要时候用。