1. 程式人生 > 其它 >datetime 給定時間內周的獲取

datetime 給定時間內周的獲取

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

摘自別人,只做備忘