python.freelycode.com-Python日期时间处理: datestuff

Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发。

问题:

在一些场景下datetime包的使用并非那么简便易用,同时很难找到其他的较为完整的替代方案。

原因:

诚实地说,我非常喜爱datetime这个模块,几乎所有需要的操作都可以通过它实现。

但是,有一些情况下,datetime却并没有那么好用。比如:

1.创建日期时间范围

2.创建未固定的日期时间

3.检验两个日期时间的差值是否在一定的范围内。

以下是datestuff包的简略介绍:

RelativeDate和RelativeDateTime

这两个函数用来创建未固定的日期和时间,可以设置timedelta参数和factory method。

默认情况下,RelativeDate以date.today,RelativeDateTime以datetime.now作为默认的factory实现。两个功能都有初始默认timedelta(0):

130d58d194284251bc63d0546f108040.png

但也可以使用其他的factory:

f8d3143b4f36480ba314dc9949635a7e.png

只要内部的factory能生成date或者datetime匹配的对象,那么都可以正常运行。这里的匹配是指date和datetime接口的匹配

另外,如果只是静态的偏移,你可以简单地通过设置timedelta 或 dateutil relativedelta来设置偏移。需要注意的是,目前timedelta 和 relativedelta不会相互干涉。

8d9c9c5b97cb4cd7a677582cfb958aa0.png

RelativeDate和RelativeDateTime还允许使用标准运算符(==,!=,>等)与date和datetime对象进行比较。 使得快速定义静态的date或者datetime边界(例如在serializer或ORM模型中)非常有用:

c9116d73edd74d63add5475da33f445e.png

事实上,加法和减法是对它们的偏移量进行操作,而不是对date或datetime值操作。

19207827d2ea4f259d17b536fdaaf574.png

另外还有一些函数可以构造日期和时间对象,每个都允许传递偏移量,但默认为timedelta():

RelativeDate.today: 默认的构造函数

RelativeDateTime.now: 默认的构造函数,允许设置tzinfo

RelativeDateTime.utcnow: 生成UTC的日期对象(注意:它依赖于datetime.utcnow函数)

RelativeDateTime.today: 默认的构造函数,不允许设置tzinfo

方便起见,也有一些构造静态时间对象的函数:

RelativeDate.fromdate: 构造常规的date对象

RelativeDateTime.fromdatetime: 构造常规的datetime对象

RelativeDateTime.fromdate: 在RelativeDateTime中鬼爪常规的date对象,可以设置tzinfo,类似于datetime.combine(the_date, time(tzinfo=tzinfo))

另外的静态构造函数,如datetime.strptime,如果需要的话,可以从以上函数中派生。

20c2280ae6e24f2a8508c873f3fc01cb.png

最后,在以上未直接提及的功能都被转换到date或datetime中实现。

DateRange

设置时间段我发现事自己经常需要的一种操作,然而,对于生成很长间隔的时间段来说是非常困难的。

相反,DateRange在Python3 range 基础上构建,该类型具有查找,迭代,索引和区间分割的功能(分割返回新的DateRange对象)

0a1f40a2b9b94414bf9bd953abcdaa8e.png

DateRange还允许通过忽略停止参数来创建开放式结束时间对象。如果使用len或者在分割或者索引选择中使用负值,该功能将不起作用。

目前,DateRange不支持relativedelta,它使用timedelta.total_seconds以确保Python 2和3的兼容。 这个问题也许在未来解决。然而,DateRange与date,datetime和timedelta的对象兼容。这一点也适用于RelativeDate和RelativeDateTime。

utils

目前,唯一的util是within_delta函数,它用于比较两个date或datetime(或类似)对象之差是否在某个设定时间区间中。

3fa015cffee44943bc686ecd88a5d7ad.png

如果需要检验时间界限的话,这个函数用起来比DateRange或RelativeDate更加轻便。但坏消息时,它不能与relativedelta相互调用,因为它和timedelta对象是无序的(至少在Python 3是这样的)。

英文原文:https://github.com/justanr/datestuff

译者:alanf

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值