什么是pythonic方式来确定给定日期是否属于当前周?

时间:2016-05-11 17:20:03

标签: python

我有“%Y%m%d”格式的字符串(即今天,2016年5月11日的“20160511”)。并且需要以编程方式(在python中)找出另一个日期(比方说 - “20160504”或“20160512”)作为参数发送到属于当前周的函数(当前是今天在5月8日星期日开始的那一周, 2016年 - 让我们假设它是本周的美国方式,从星期日开始,即第一个应该返回False,第二个应该返回 - True。

我提出的所有想法都来计算那个星期日的日期,并将传递的参数作为参数进行比较,然后,如果将来是这一天,那么它不是在本周的星期六之后,但它看起来不够优雅(或“pythonic”)。

1 个答案:

答案 0 :(得分:7)

您可以将isodate方法用于日期时间对象:

datetime.datetime.strptime('20160511','%Y%m%d').isocalendar()[1]

它将以整数形式返回当前周,以便您可以比较两个日期以查看它们是否属于同一周。这是一个可以在两个不同日期执行此操作的函数:

import datetime

def same_week(date1, date2):
    d1 = datetime.datetime.strptime(date1,'%Y%m%d')
    d2 = datetime.datetime.strptime(date2,'%Y%m%d')
    return d1.isocalendar()[1] == d2.isocalendar()[1] \
              and d1.year == d2.year

要获取当天,请使用datetime.datetime.today()。因此,重写上述功能可以完全满足您的要求:

import datetime

def same_week(dateString):
    '''returns true if a dateString in %Y%m%d format is part of the current week'''
    d1 = datetime.datetime.strptime(dateString,'%Y%m%d')
    d2 = datetime.datetime.today()
    return d1.isocalendar()[1] == d2.isocalendar()[1] \
              and d1.year == d2.year