python判断日期在某时间区间_datetime-根据Python中的日期范围检查日期

datetime-根据Python中的日期范围检查日期

我有一个日期变量:2011-01-15,如果所说的日期是从今天到3天内,我想返回一个布尔值。 我不太确定如何在Python中构造它。 我只处理日期,而不处理日期时间。

我的工作示例是“宽限期”。 一个用户登录到我的网站,如果宽限期在今天的3天之内,则该用户将省略其他脚本等。

我知道您可以在Python日期模块中做一些花哨的/复杂的事情,但是我不确定在哪里看。

4个解决方案

113 votes

在Python中检查范围,您可以使用a <= x <= b:

>>> import datetime

>>> today = datetime.date.today()

>>> margin = datetime.timedelta(days = 3)

>>> today - margin <= datetime.date(2011, 1, 15) <= today + margin

True

Mark Byers answered 2020-02-22T03:21:17Z

8 votes

减去两个date对象,将得到timedelta对象,您可以将其与其他timedelta对象进行比较。

例如:

>>> from datetime import date, timedelta

>>> date(2011, 1, 15) - date.today()

datetime.timedelta(1)

>>> date(2011, 1, 15) - date.today() < timedelta(days = 3)

True

>>> date(2011, 1, 18) - date.today() < timedelta(days = 3)

False

至于“去哪里看”:官方文档非常出色。

Thomas answered 2020-02-22T03:21:46Z

5 votes

其他人已经获得了足够的答案,因此无需对此答案进行投票。

(使用Mark Byers的回答中所示的技术;对他+1)。

import datetime as dt

def within_days_from_today(the_date, num_days=7):

'''

return True if date between today and `num_days` from today

return False otherwise

>>> today = dt.date.today()

>>> within_days_from_today(today - dt.timedelta(days=1), num_days=3)

False

>>> within_days_from_today(dt.date.today(), num_days=3)

True

>>> within_days_from_today(today + dt.timedelta(days=1), num_days=3)

True

>>> within_days_from_today(today + dt.timedelta(days=2), num_days=3)

True

>>> within_days_from_today(today + dt.timedelta(days=3), num_days=3)

True

>>> within_days_from_today(today + dt.timedelta(days=4), num_days=3)

False

'''

lower_limit = dt.date.today()

upper_limit = lower_limit + dt.timedelta(days=num_days)

if lower_limit <= the_date <= upper_limit:

return True

else:

return False

if __name__ == "__main__":

import doctest

doctest.testmod()

bernie answered 2020-02-22T03:22:10Z

4 votes

面向对象的解决方案

import datetime

class DatetimeRange:

def __init__(self, dt1, dt2):

self._dt1 = dt1

self._dt2 = dt2

def __contains__(self, dt):

return self._dt1 < dt < self._dt2

dt1 = datetime.datetime.now()

dt2 = dt1 + datetime.timedelta(days = 2)

test_true = dt1 + datetime.timedelta(days = 1)

test_false = dt1 + datetime.timedelta(days = 5)

test_true in DatetimeRange(dt1, dt2) #Returns True

test_false in DatetimeRange(dt1, dt2) #Returns False

mdornfe1 answered 2020-02-22T03:22:30Z

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值