Python 常用时间库

原文链接: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

 

感觉以上内容不错,就作为笔记,以备将来需要时候用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jcodes

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值