等效于Python中Excel的Weeknum函数

时间:2018-07-19 10:03:30

标签: excel python-3.x excel-formula python-datetime

我正在使当前在Excel中处理的报告自动化。作为其中的一部分,我想要Python等效于Excel的Weeknum函数(使用系统1。Reference here),该函数将具有1月1日的一周视为第1周。

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

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

这是伪代码。您可以将其放入Python。 您将定义一个函数Weeknum,该函数将日期d作为其输入并返回1到53之间的数字。 您将使用平日功能来确定第一周缺多少天。因此,如果1月1日位于一周的第一天,则缺席的天数为0。如果1月1日为一周的最后一天,则缺席的天数为6。有几种方法可以做到这一点,具体取决于关于一周的第一天如何映射到工作日函数的约定的一些知识。最坏的情况是,您可以通过将计数器设置为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