如何获得给定月份的一周中某天的第N次出现?

时间:2016-05-28 20:48:32

标签: python python-2.7 date

一周中没有定义此值。 在大多数情况下,开始周和开始月之间的转换会导致问题。

是否有任何python库或算法来计算这个值?

2 个答案:

答案 0 :(得分:1)

您可以通过循环整月来计算这一点,并计算您是否在工作日遇到 n

import datetime

def get_n_weekday(year, month, day_of_week, n):
    count = 0
    for i in xrange(1, 32):
        try:
            d = datetime.date(year, month, i)
        except ValueError:
            break
        if d.isoweekday() == day_of_week:
            count += 1
        if count == n:
            return d
    return None

例如:get_n_weekday(2016, 1, 1, 1) = 2016年1月的第一个星期一,datetime.date(2016, 1, 4)

这使用date.isoweekday(),表示星期一是1,星期日是7。

答案 1 :(得分:1)

比Simeon的答案更简单的两个解决方案:

def f1(day_of_month):
    ret = None    
    if ( day_of_month % 7 == 0 ):
        ret = day_of_month/7
    else:
        ret = (day_of_month//7) + 1
    return ret       


def f2(day_of_month):
    actual_day = day_of_month
    counter = 0
    while actual_day > 0:
        actual_day = actual_day - 7
        counter = counter + 1
    return counter