python 返回指定日期的周一时间和周日时间,返回指定日期区间内的所有周一和周日时间列表

"""
@author: zhangjun.xue
@time: 2020/5/8 20:28
@file: test_v2.py
@desc: 
"""
import datetime


def last_first_date_and_last_date(n):
    """
    获取前n周开始时间和结束时间,参数n:代表前n周
    :param n: int类型 数字:1,2,3,4,5
    :return: 返回前n周的周一0点时间  和 周日23点59分59秒
    """
    now = datetime.datetime.now()
    before_n_week_start = now - datetime.timedelta(days=now.weekday() + 7*n, hours=now.hour, minutes=now.minute, seconds=now.second, microseconds=now.microsecond)
    before_n_week_end = before_n_week_start + datetime.timedelta(days=6, hours=23, minutes=59, seconds=59)
    return before_n_week_start, before_n_week_end


def get_week_monday_and_sunday_by_date(date_str):
    """
    给定一个日期-返回日期所在周的周一0点时间 和 周日23点59分59秒
    :param date_str: 如:"2020-05-01"
    :return: 给定一个日期-返回日期所在周的周一0点时间 和 周日23点59分59秒
    """
    now_time = datetime.datetime.strptime(date_str + " 00:00:00", "%Y-%m-%d %H:%M:%S")
    week_start_time = now_time - datetime.timedelta(days=now_time.weekday(), hours=now_time.hour, minutes=now_time.minute, seconds=now_time.second, microseconds=now_time.microsecond)
    week_end_time = week_start_time + datetime.timedelta(days=6, hours=23, minutes=59, seconds=59)
    return week_start_time, week_end_time


def get_all_monday_and_sunday_by_date_interval(start_date_str, end_date_str):
    """
    给定时间(日期)区间,返回区间中所有的周起止时间列表(不含本周)
    :param start_date_str: "2020-01-31"
    :param end_date_str: "2020-05-08"
    :return:
    """
    date_list = list()

    # 本周一开始时间
    now = datetime.datetime.now()
    now_week_monday = now - datetime.timedelta(days=now.weekday(), hours=now.hour, minutes=now.minute, seconds=now.second, microseconds=now.microsecond)
    print('now_week_monday = {}'.format(now_week_monday))

    # 起始时间所在周 - 周一和周日
    start_week_monday, start_week_sunday = get_week_monday_and_sunday_by_date(start_date_str)
    print('start_week = {} -> {}'.format(start_week_monday, start_week_sunday))

    # 截止时间所在周 - 周一和周日
    end_week_monday, end_week_sunday = get_week_monday_and_sunday_by_date(end_date_str)
    print('end_week = {} -> {}'.format(end_week_monday, end_week_sunday))
    if end_week_monday < now_week_monday:
        date_list.append({"start_time": end_week_monday, "end_time": end_week_sunday})

    count = 1
    while True:
        week_start_time = end_week_monday - datetime.timedelta(days=7 * count)
        week_end_time = week_start_time + datetime.timedelta(days=6, hours=23, minutes=59, seconds=59)
        print('middle_week = {} -> {}'.format(week_start_time, week_end_time))

        count += 1
        if week_start_time >= now_week_monday:
            continue
        if week_start_time < start_week_monday:
            break
        print('append middle_week = {} -> {}'.format(week_start_time, week_end_time))
        date_list.append({"start_time": week_start_time, "end_time": week_end_time})
    return date_list


if __name__ == "__main__":
    pass
    # 给定时间(日期)区间,返回区间中所有的周起止时间列表(不含本周)
    date_list = get_all_monday_and_sunday_by_date_interval("2020-04-01", "2020-05-31")
    print('date_list = {}'.format(date_list))

    # 给定一个日期-返回日期所在周的周一0点时间 和 周日23点59分59秒
    # week_start_time, week_end_time = get_week_monday_and_sunday_by_date('2020-04-10')
    # print('result = {} -> {}'.format(week_start_time, week_end_time))

 

你可能感兴趣的:(python,datetime)