Python查找两个日期之间的日期

时间:2019-06-22 14:10:28

标签: python python-3.x python-datetime python-dateutil

我正在使用python3开发一个项目,在该项目中,我必须使用api,并且需要获取日期范围内某个星期中特定日期的数据。

因此,示例输入参数为:

firstDay = '1-January-2000'
lastDay = '22-february-2000'
weekDay = 'Monday'

因此,日期将包含在API响应中,但是当天没有任何信息。因此,我必须获取日期范围之间特定日期(例如Monday)的所有日期。

根据上面的示例,如何获取MondaysfirstDay之间的所有lastDay的日期?

3 个答案:

答案 0 :(得分:5)

from datetime import date, timedelta, datetime
import time

firstDay = '1-January-2000'
lastDay = '22-february-2000'
weekDay = 'Monday'

firstDay = datetime.strptime(firstDay, '%d-%B-%Y') 
lastDay = datetime.strptime(lastDay, '%d-%B-%Y')
dates = [firstDay + timedelta(days=x) for x in range((lastDay-firstDay).days + 1) if (firstDay + timedelta(days=x)).weekday() == time.strptime(weekDay, '%A').tm_wday]

输出

dates
[datetime.datetime(2000, 1, 3, 0, 0),
 datetime.datetime(2000, 1, 10, 0, 0),
 datetime.datetime(2000, 1, 17, 0, 0),
 datetime.datetime(2000, 1, 24, 0, 0),
 datetime.datetime(2000, 1, 31, 0, 0),
 datetime.datetime(2000, 2, 7, 0, 0),
 datetime.datetime(2000, 2, 14, 0, 0),
 datetime.datetime(2000, 2, 21, 0, 0)]


格式为weekDay-Month-year

的输出
[d.strftime("%A-%B-%Y") for d in dates] 

['Monday-January-2000',
 'Monday-January-2000',
 'Monday-January-2000',
 'Monday-January-2000',
 'Monday-January-2000',
 'Monday-February-2000',
 'Monday-February-2000',
 'Monday-February-2000']

firstDay格式的输出:1-January-2000

[d.strftime("%-d-%B-%Y") for d in dates]   
['3-January-2000',
 '10-January-2000',
 '17-January-2000',
 '24-January-2000',
 '31-January-2000',
 '7-February-2000',
 '14-February-2000',
 '21-February-2000']

答案 1 :(得分:1)

请尝试以下操作:

import datetime
import calendar

def get_all_weekdays_between_range(firstDay, lastDay, weekDay):
    month_name_to_num = {v.lower(): k for k, v in enumerate(calendar.month_name)}
    day_name_to_num = {v.lower(): k for k, v in enumerate(calendar.day_name)}

    def parse_date(dateStr):
        parts = dateStr.split('-')
        return datetime.date(int(parts[2]), month_name_to_num[parts[1].lower()], int(parts[0]))

    first = parse_date(firstDay)
    last = parse_date(lastDay)

    result = []
    current = first
    while current <= last:
        if calendar.weekday(current.year, current.month, current.day) == day_name_to_num[weekDay.lower()]:
            result.append(current)
        current += datetime.timedelta(days=1)
    return result


firstDay = '1-January-2000'
lastDay = '22-february-2000'
weekDay = 'Monday'

all_days = get_all_weekdays_between_range(firstDay,lastDay,weekDay)
for day in all_days:
    print(day)

答案 2 :(得分:0)

您曾尝试在python中使用datetime库,这是一个完美的方案。它包含有关年月日的所有信息,甚至可以进行日期计算。例如,查找两个日期之间有多少天。它还可以将日期转换成您想要的任何格式。

https://docs.python.org/3/library/datetime.html

这是您问题的答案

from datetime import date, timedelta
dstart = datetime.strptime('1-January-2000', '%d-%B-%Y') 
dend= datetime.strptime('22-February-2000', '%d-%B-%Y')
ans = (dend - dstart).days / 7
if int(ans) + 2/7 <= ans:
    ans = int(ans) + 1
else:
    ans = int(ans)
print(ans)
相关问题