跳转到主要内容

为人类设计的日期时间。

项目描述

https://img.shields.io/pypi/v/maya.svg https://travis-ci.org/kennethreitz/maya.svg?branch=master https://img.shields.io/badge/SayThanks-!-1EAEDB.svg

在Python中处理日期时间非常令人沮丧,尤其是在处理不同系统上的不同区域时。这个库的存在是为了使简单的事情变得更容易,同时承认时间是一个错觉(时区更是如此)。

应该通过为人类编写的API与日期时间交互。

Maya主要围绕从网站解析日期时间数据的头痛和使用案例构建。

https://farm4.staticflickr.com/3702/33288285996_5b69d2b8f7_k_d.jpg

艺术作品由Sam Flores创作(照片由Kenneth Reitz拍摄)。

如果您想为Kenneth Reitz的开源项目提供财务支持,请考虑访问此链接 (点击访问)。您的支持对保持我的动力至关重要,因为开源项目不再是我的日常工作的一部分。

☤ Maya 的基本用法

看吧,这是人类可读的日期和时间!

>>> now = maya.now()
<MayaDT epoch=1481850660.9>

>>> tomorrow = maya.when('tomorrow')
<MayaDT epoch=1481919067.23>

>>> tomorrow.slang_date()
'tomorrow'

>>> tomorrow.slang_time()
'23 hours from now'

# Also: MayaDT.from_iso8601(...)
>>> tomorrow.iso8601()
'2017-02-10T22:17:01.445418Z'

# Also: MayaDT.from_rfc2822(...)
>>> tomorrow.rfc2822()
'Fri, 10 Feb 2017 22:17:01 GMT'

# Also: MayaDT.from_rfc3339(...)
>>> tomorrow.rfc3339()
'2017-02-10T22:17:01.44Z'

>>> tomorrow.datetime()
datetime.datetime(2016, 12, 16, 15, 11, 30, 263350, tzinfo=<UTC>)

# Automatically parse datetime strings and generate naive datetimes.
>>> scraped = '2016-12-16 18:23:45.423992+00:00'
>>> maya.parse(scraped).datetime(to_timezone='US/Eastern', naive=True)
datetime.datetime(2016, 12, 16, 13, 23, 45, 423992)

>>> rand_day = maya.when('2011-02-07', timezone='US/Eastern')
<MayaDT epoch=1297036800.0>

# Maya speaks Python.
>>> m = maya.MayaDT.from_datetime(datetime.utcnow())
>>> print(m)
Wed, 20 Sep 2017 17:24:32 GMT

>>> m = maya.MayaDT.from_struct(time.gmtime())
>>> print(m)
Wed, 20 Sep 2017 17:24:32 GMT

>>> m = maya.MayaDT(time.time())
>>> print(m)
Wed, 20 Sep 2017 17:24:32 GMT

>>> rand_day.day
7

>>> rand_day.add(days=10).day
17

# Always.
>>> rand_day.timezone
UTC

# Range of hours in a day:
>>> maya.intervals(start=maya.now(), end=maya.now().add(days=1), interval=60*60)
<generator object intervals at 0x105ba5820>

# snap modifiers
>>> dt = maya.when('Mon, 21 Feb 1994 21:21:42 GMT')
>>> dt.snap('@d+3h').rfc2822()
'Mon, 21 Feb 1994 03:00:00 GMT'

☤ Maya 的高级用法

除了时间戳,Maya 还包含一个功能强大的 MayaInterval 类,它表示一段时间范围(例如一个事件)。使用这个类,您可以轻松地进行各种高级日历计算。

例如

>>> from maya import MayaInterval

# Create an event that is one hour long, starting now.
>>> event_start = maya.now()
>>> event_end = event_start.add(hours=1)

>>> event = MayaInterval(start=event_start, end=event_end)

从这里,您可以找到许多方法来比较这个事件与另一个事件。

☤ 这有什么用?

  • 所有时区代数在所有机器上的表现都相同,无论系统区域设置如何。

  • 完全对称地导入和导出 ISO 8601 和 RFC 2822 日期时间戳。

  • 出色的解析,无论是为人类还是为机器编写的日期(maya.when()maya.parse())。

  • 支持人类俚语,无论是导入还是导出(例如 一个小时前)。

  • 可以非常轻松地生成日期时间,无论是带时区信息还是不带。

  • 这个库基于纪元时间,但确实支持 1970 年 1 月 1 日之前的日期,通过使用负整数。

  • Maya 从不惊慌,并且总是带着毛巾。

☤ 关于 Delorean、Arrow 和 Pendulum 呢?

所有这些项目都是互补的,并且是朋友。例如,Pendulum 帮助为 Maya 的解析提供动力。

例如,Arrow 是一个很棒的库,但它并不是我想要的日期时间库。在许多方面,它在某些方面比 Maya 更好。在某些方面,在我看来,它并不好。

我仅仅想要一个合理的 API,用于处理日期时间,对于我想要做的所有事情来说都是有意义的——特别是在处理时区代数时。Arrow 并没有做我所需要做的所有事情(但它做了很多!)Maya 确切地做了我所需要的事情。

我认为这些项目是相互补充的。Maya 非常适合解析网站和处理日历事件!

☤ 安装 Maya

安装简单,使用 pipenv

$ pipenv install maya

✨🍰✨

☤ 你喜欢吗?

说谢谢!

如何贡献

  1. 查找开放的问题或创建一个新的问题来开始围绕功能想法或错误进行讨论。

  2. 在 GitHub 上 (点击访问) 分叉存储库,开始修改 master 分支(或从中分支出来)。

  3. 编写一个测试来显示错误已被修复或功能按预期工作。

  4. 发送一个拉取请求,并持续跟踪维护者,直到它被合并并发布。 :) 确保将自己添加到 AUTHORS 中。

项目详情


下载文件

下载您平台对应的文件。如果您不确定该选择哪个,请了解有关安装包的更多信息。

源代码发行版

maya-0.6.1.tar.gz (14.4 kB 查看哈希值)

上传时间 源代码

构建发行版

maya-0.6.1-py2.py3-none-any.whl (12.8 kB 查看哈希值)

上传时间 Python 2 Python 3

支持者