文档章节

实用又强大,6 款 Python 时间&日期库推荐

编辑部的故事
 编辑部的故事
发布于 2017/10/26 18:37
字数 1083
阅读 5K
收藏 146

在使用 Python 的开发过程中,除了使用 datetime 标准库来处理时间和日期,还有许多第三方的开源库值得尝试。

1、Arrow

Arrow 是一个专门处理时间和日期的轻量级 Python 库,它提供了一种合理、智能的方式来创建、操作、格式化、转换时间和日期,并提供了一个支持许多常见构建方案的智能模块 API 。简单来说,它可以帮你以更简便的操作和更少的代码来使用日期和时间。其设计灵感主要来源于 moment.js 和 requests

Quick start

$ pip install arrow
>>> import arrow
>>> utc = arrow.utcnow()
>>> utc
<Arrow [2013-05-11T21:23:58.970460+00:00]>

>>> utc = utc.replace(hours=-1)
>>> utc
<Arrow [2013-05-11T20:23:58.970460+00:00]>

>>> local = utc.to('US/Pacific')
>>> local
<Arrow [2013-05-11T13:23:58.970460-07:00]>

>>> arrow.get('2013-05-11T21:23:58.970460+00:00')
<Arrow [2013-05-11T21:23:58.970460+00:00]>

>>> local.timestamp
1368303838

>>> local.format()
'2013-05-11 13:23:58 -07:00'

>>> local.format('YYYY-MM-DD HH:mm:ss ZZ')
'2013-05-11 13:23:58 -07:00'

>>> local.humanize()
'an hour ago'

>>> local.humanize(locale='ko_kr')
'1시간 전'

2、Delorean

Delorean 提供了一个相比于 datetime 和 pytz 的更好的抽象,让你处理时间更容易。它有很多有用的处理时区的特性,标准化时区或者从一个时区改变到另外一个时区。

Quick start

from datetime import datetime
import pytz

est = pytz.timezone('US/Eastern')
d = datetime.now(pytz.utc)
d = est.normalize(d.astimezone(est))
return d
from delorean import Delorean

d = Delorean()
d = d.shift('US/Eastern')
return d

3、Pendulum

原生的 datetime 足够应付基本情况,但当面对更复杂的用例时,通常会有的捉襟见肘,不那么直观。 Pendulum 在标准库的基础之上,提供了一个更简洁,更易于使用的 API ,旨在让 Python datetime 更好用。

Quick start

>>> import pendulum

>>> now_in_paris = pendulum.now('Europe/Paris')
>>> now_in_paris
'2016-07-04T00:49:58.502116+02:00'

# Seamless timezone switching
>>> now_in_paris.in_timezone('UTC')
'2016-07-03T22:49:58.502116+00:00'

>>> tomorrow = pendulum.now().add(days=1)
>>> last_week = pendulum.now().subtract(weeks=1)

>>> if pendulum.now().is_weekend():
...     print('Party!')
'Party!'

>>> past = pendulum.now().subtract(minutes=2)
>>> past.diff_for_humans()
>>> '2 minutes ago'

>>> delta = past - last_week
>>> delta.hours
23
>>> delta.in_words(locale='en')
'6 days 23 hours 58 minutes'

# Proper handling of datetime normalization
>>> pendulum.create(2013, 3, 31, 2, 30, 0, 0, 'Europe/Paris')
'2013-03-31T03:30:00+02:00' # 2:30 does not exist (Skipped time)

# Proper handling of dst transitions
>>> just_before = pendulum.create(2013, 3, 31, 1, 59, 59, 999999, 'Europe/Paris')
'2013-03-31T01:59:59.999999+01:00'
>>> just_before.add(microseconds=1)
'2013-03-31T03:00:00+02:00'

4、dateutil

dateutil 是 datetime 标准库的一个扩展库,几乎支持以所有字符串格式对日期进行通用解析,日期计算灵活,内部数据更新及时。

Quick start

>>> from dateutil.relativedelta import *
>>> from dateutil.easter import *
>>> from dateutil.rrule import *
>>> from dateutil.parser import *
>>> from datetime import *
>>> now = parse("Sat Oct 11 17:13:46 UTC 2003")
>>> today = now.date()
>>> year = rrule(YEARLY,dtstart=now,bymonth=8,bymonthday=13,byweekday=FR)[0].year
>>> rdelta = relativedelta(easter(year), today)
>>> print("Today is: %s" % today)
Today is: 2003-10-11
>>> print("Year with next Aug 13th on a Friday is: %s" % year)
Year with next Aug 13th on a Friday is: 2004
>>> print("How far is the Easter of that year: %s" % rdelta)
How far is the Easter of that year: relativedelta(months=+6)
>>> print("And the Easter of that year is: %s" % (today+rdelta))
And the Easter of that year is: 2004-04-11

5、moment

用于处理日期/时间的 Python 库,设计灵感同样是来源于 moment.js 和 requests ,设计理念源自 Times Python 模块。

Usage

import moment
from datetime import datetime

# Create a moment from a string
moment.date("12-18-2012")

# Create a moment with a specified strftime format
moment.date("12-18-2012", "%m-%d-%Y")

# Moment uses the awesome dateparser library behind the scenes
moment.date("2012-12-18")

# Create a moment with words in it
moment.date("December 18, 2012")

# Create a moment that would normally be pretty hard to do
moment.date("2 weeks ago")

# Create a future moment that would otherwise be really difficult
moment.date("2 weeks from now")

# Create a moment from the current datetime
moment.now()

# The moment can also be UTC-based
moment.utcnow()

# Create a moment with the UTC time zone
moment.utc("2012-12-18")

# Create a moment from a Unix timestamp
moment.unix(1355875153626)

# Create a moment from a Unix UTC timestamp
moment.unix(1355875153626, utc=True)

# Return a datetime instance
moment.date(2012, 12, 18).date

# We can do the same thing with the UTC method
moment.utc(2012, 12, 18).date

# Create and format a moment using Moment.js semantics
moment.now().format("YYYY-M-D")

# Create and format a moment with strftime semantics
moment.date(2012, 12, 18).strftime("%Y-%m-%d")

# Update your moment's time zone
moment.date(datetime(2012, 12, 18)).locale("US/Central").date

# Alter the moment's UTC time zone to a different time zone
moment.utcnow().timezone("US/Eastern").date

# Set and update your moment's time zone. For instance, I'm on the
# west coast, but want NYC's current time.
moment.now().locale("US/Pacific").timezone("US/Eastern")

# In order to manipulate time zones, a locale must always be set or
# you must be using UTC.
moment.utcnow().timezone("US/Eastern").date

# You can also clone a moment, so the original stays unaltered
now = moment.utcnow().timezone("US/Pacific")
future = now.clone().add(weeks=2)

6、When.py

提供对用户非常友好的特性来帮助执行常见的日期和时间操作。

Usage

© 著作权归作者所有

编辑部的故事

编辑部的故事

粉丝 1587
博文 271
码字总数 536061
作品 0
深圳
运营/编辑
私信 提问
加载中

评论(0)

牛逼啊!一个随时随地写Python代码的神器

来源:菜鸟学Python(微信号:cainiao_xueyuan) 链接:https://mp.weixin.qq.com/s/LplxEdCBjE0wyjsFUYe_-Q 现在学Python的人越来越多,很多小伙伴都非常有激情。利用碎片时间随时随地学习P...

程序员之家_
2018/11/14
0
0
Python 开发者应该知道的 7 个开发库

本文由 OSChina 译自 7 Python Libraries you should know about 在我多年的 Python 编程经历以及在 Github 上的探索漫游过程中,我发掘到一些很不错的 Python 开发包,这些包大大简化了开发...

红薯
2012/11/12
2.3W
42
【原创】MySQL 之 slow log

慢查询有什么用? 它能记录下所有执行超过longquerytime时间的SQL语句,帮你找到执行慢的SQL,方便我们对这些SQL进行优化。 测试用 MySQL 版本。 Server version: 5.6.10-log Source distri...

摩云飞
2013/09/09
5.6K
22
够用的 Python 写日志的知识——标准日志模块logging简介

前一段工作的时候用到了python写后台系统,需要把一些系统的行为记录下来。本着不要去重复发明轮子的精神,就去搜索了一下python的系统库本身是否有写日志的模块。果然有。python语言作为一门...

costaxu
2012/09/23
6.9K
0
6 个 Python 的日期时间库

在 Python 中有许多库可以很容易地测试、转换和读取日期和时间信息。 这篇文章是与 Jeff Triplett 一起合写的。 曾几何时,我们中的一个人(Lacey)盯了一个多小时的 Python 文档中描述日期和...

16%
2018/05/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

2020 年,CEO 们对管理的理解又要变了

摘要 看到「工作流」这一层,才能看到「执行力」和「创造力」这两个大词儿,到底是怎么实现的。 从疫情爆发开始,极客公园前沿社的企业家微信群就没消停过。 群里的话题从一开始的动用能力向...

osc_7cws6vmd
2分钟前
9
0
redisson集群转载

转载:https://blog.csdn.net/u010325193/article/details/86656300 参考:https://segmentfault.com/a/1190000016976564 前几天发的一篇文章《Redlock:Redis分布式锁最牛逼的实现》,引起了...

hexiaoming123
4分钟前
7
0
postman(待续)

postman

osc_n1fa9m3z
4分钟前
3
0
jmeter(待续)

jmeter

osc_15fvklrg
5分钟前
9
0
createSQLQuery().list()查出的时间没有时分秒

在开发过程中发现提取Oracle中Date类型的数据, 开始发现本地运行的时候有时分秒, 2020-04-09 13:26:20.0 部署在服务器就没有时分秒, 2020-04-09 找了代码和jab包都没有发现差异,在网上搜...

zb1021
5分钟前
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部