从 YEAR 和 WEEK 编号获取开始/结束 DATETIME 并从 DATETIME 获取 YEAR 和 WEEK 编号

问题描述

我有一个自定义日历,每周从周四 19:00:00 开始,到周四 18:59:59 结束。 我正在尝试使用此自定义日历从给定的年和周数返回日期时间范围,并从给定的日期时间值返回年和周数。

对于 ISO 日历来说非常简单

from datetime import datetime,timedelta

def get_ISO_wk(date_time):
    yr_num = date_time.isocalendar()[0]
    wk_num = date_time.isocalendar()[1]
    if wk_num < 10:
        wk_num = "0{}".format(wk_num)

    return "WW{}-{}".format(yr_num,wk_num)

def get_ISO_range(year,week):
    d = datetime(year,1,0)
    dlt = timedelta(days=((week - 1) * 7) - 2)
    wk_start = d + dlt

    d = datetime(year,23,59,59)
    dlt = timedelta(days=((week - 1) * 7) - 2)
    wk_end = d + dlt + timedelta(days=6)

    return str(wk_start),str(wk_end)

my_dt = datetime(2020,12,31,10,43,22)
my_yr = 2020
my_wk = 53

print("ISO Week is {}".format(get_ISO_wk(my_dt)))
print("Week range is {}".format(get_ISO_range(my_yr,my_wk)))

>>> ISO Week is WW2020-53
>>> Week range is ('2020-12-28 00:00:00','2021-01-03 23:59:59')

我做了一些研究,发现这个 customize calendar 对于指定一周的开始日期非常有用。但我就是不知道如何添加自定义开始/结束时间并使用自定义日历从给定的年份和周数推导出日期范围。

人们是如何做到这一点的?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)