相当于Excel';Python中的s Weeknum函数

相当于Excel';Python中的s Weeknum函数,excel,python-3.x,excel-formula,python-datetime,Excel,Python 3.x,Excel Formula,Python Datetime,我正在努力使目前用Excel处理的报告自动化。作为这项工作的一部分,我需要一个与Excel的Weeknum函数(使用System 1.)相当的Python函数,该函数将1月1日这一周视为1周 PS:我已经尝试了ISOCalendar,但它给出了错误的一周,因为它的一周从周一开始。我还尝试了strftime(“%U”),它返回了相同的错误号码 有人能帮忙吗?这是伪代码。您可以将其转换为Python。 您将定义一个函数Weeknum,该函数以日期d作为输入,并返回一个介于1和53之间的数字。 您将使

我正在努力使目前用Excel处理的报告自动化。作为这项工作的一部分,我需要一个与Excel的Weeknum函数(使用System 1.)相当的Python函数,该函数将1月1日这一周视为1周

PS:我已经尝试了ISOCalendar,但它给出了错误的一周,因为它的一周从周一开始。我还尝试了strftime(“%U”),它返回了相同的错误号码


有人能帮忙吗?

这是伪代码。您可以将其转换为Python。 您将定义一个函数Weeknum,该函数以日期d作为输入,并返回一个介于1和53之间的数字。 您将使用weekday函数确定第一周的短天数。因此,如果1月1日是一周的第一天,则短天数为0。如果1月1日是一周的最后一天,则短天数为6天。有几种方法可以做到这一点,这取决于一周的第一天映射到工作日函数约定的程度。最糟糕的情况是,您可以通过将计数器设置为1,将日期变量设置为一年的1月1日来计算第一周的天数,而日期不是一周的最后一天,将计数器和日期设置为1。那么短天数是7减去计数器。 在d年的某一天,得到介于1和366之间的数字j。一种方法是取d和d年1月1日之间的天数差的1+。 然后Weeknum应该返回(j+6+短天数)div 7

编辑:我用Python写的

import datetime
def julian(d):#takes a date d and returns what day in the year it is 1..366
    jan1 = datetime.date(d.year,1,1)
    return 1+(d-jan1).days
def daysInFirstWeekOfJanuary(y):
    #takes a year and says how many days there were in the first week of #january that year
    janDay = datetime.date(y,1,1)
    result = 1
    while (janDay.weekday()!=5):#until Saturday, change if you hold Sunday is not the first day of the week
        result=result+1
        janDay=janDay+datetime.timedelta(days=1)
    return result
def daysShortInFirstWeekOfJanuary(y):
    return 7-daysInFirstWeekOfJanuary(y)
def weeknum(d):#takes a date and returns the week number in the year
#where Jan 1 of the year is the start of week 1, and the following Sunday starts week 2
     return(julian(d)+6+daysShortInFirstWeekOfJanuary(d.year)) // 7

您应该能够基于这两个系统编写自己的转换器。您可能会下注。我觉得有一些一行或两行的解决方案可以利用现有的函数,并在它们与您期望的行为不一致时进行纠正,但这很有趣。