在Python中,如何根据年份、周数和工作日获取日期?

2024-09-30 22:20:43 发布

您现在位置:Python中文网/ 问答频道 /正文

给定一个日期值和一个数字,我想看看这个数字与前几年的同一天的数字相比如何。在

对于“等价日”,我指的是相同的周数和相同的工作日,而不是相同的日历日期。在

例如,从1975年5月25日开始:

>>> holyGrail = datetime.datetime(1975,5,25)

是第21周的第七天:

^{pr2}$

我想把1974年、1973年的第21周第7天的日期拉出来。。在

基本上我想做这样的事情:

>>> yearBack = datetime.datetime().isocalendar(1974,21,7)

并让它返回与该周和工作日相匹配的日期,在本例中是1974年5月26日,而不是25日:

>>> yearBack = datetime.datetime(1974,5,26)
>>> yearBack.isocalendar()
(1974, 21, 7)
>>>

我从https://stackoverflow.com/a/28069361/5324657看出有一个(未记录的?)将%V格式化为strftime(),返回ISO-8601周数,这在strftime中工作正常,似乎是我需要的,但是当我试图在strptime()中使用相同的%V格式时,我得到了错误

ValueError: 'V' is a bad directive in format '%Y-%V-%w'

我怎样才能轻松/可靠地将年/周/工作日的日期追溯到过去呢?在

请注意,我并不真的关心几周的开始时间,也不关心新年期间的一周是什么,我只需要一个一致的方法,以便能够进行准确的同比比较。在


Tags: httpsdatetime数字stackoverflow事情等价关心工作日
1条回答
网友
1楼 · 发布于 2024-09-30 22:20:43

我认为这应该行得通:

def getDate(d, y):
    s = datetime.date(y, 1, 1)
    while s.isocalendar()[2] != 4:
        s += datetime.timedelta(days=1)
    s += datetime.timedelta(weeks=d.isocalendar()[1]-1,
                            days=d.isocalendar()[2]-s.isocalendar()[2])
    if d.isocalendar()[-2:] == s.isocalendar()[-2:]:
         return s
    raise ValueError("{} has no equivalent in {}".format(d, y))

在公历中,有些年份有52周,有些年份有53周,因此并不总是有一个相等的日期。在这些情况下,它将引发ValueError。在

^{pr2}$

相关问题 更多 >