【问题标题】:How to determine the week of year starting on sunday using Python?如何使用 Python 确定从星期日开始的一年中的哪一周?
【发布时间】:2019-12-15 07:52:50
【问题描述】:

我需要从星期日开始计算一年中的一周。默认的 ISO 周从星期一开始,但我的要求是将星期日作为一周的开始。

例如 2019-01-06星期日,应该是第 2 周。

我试过了

t1.strftime("%U")

但问题是它在第一个星期日之前的新一年中的所有日子都返回 0,并从一年中的第一个星期日开始计算周数。

提前感谢您的帮助。

【问题讨论】:

    标签: python python-2.7 datetime datetime-format python-datetime


    【解决方案1】:

    有点老套,但这样就可以了:

    import datetime
    
    
    def week(t):
        if datetime.datetime(t.year, 1, 1).weekday() == 6:
            # The year started with a Sunday.
            incr = 0
        else:
            incr = 1
        return int(t.strftime("%U")) + incr
    
    
    ls = [datetime.datetime(2019, 1, 5), datetime.datetime(2019, 1, 6),
          datetime.datetime(2019, 8, 3), datetime.datetime(2019, 8, 4),
          datetime.datetime(2017, 1, 1)]
    
    for t in ls:
        print("day:", t.strftime("%Y-%m-%d %a,"), "week:", week(t))
    

    输出:

    day: 2019-01-05 Sat, week: 1
    day: 2019-01-06 Sun, week: 2
    day: 2019-08-03 Sat, week: 31
    day: 2019-08-04 Sun, week: 32
    day: 2017-01-01 Sun, week: 1
    

    【讨论】:

    • 谢谢。提供的 hack 运行良好,节省了我一天的时间
    【解决方案2】:

    分享我的代码以获得与您的稍有不同的实现。 我考虑到一年的第一天可能属于去年的一周。不过,您可以根据需要很好地调整此代码。

    下面给出的代码返回任何“给定日期”的 year_wk 和
    星期从任何 day_no 开始(在下面的代码中是 4 即星期五)

    import math as mt
    import datetime as dt    
    
    def get_first_date_year(year, day_no):
        d1 = dt.date(year, 1, 1)
        return d1 + dt.timedelta((day_no - d1.weekday())%7)
    
    def get_yearwk_from_date(given_date, day_no):
        first_date = get_first_date_year(given_date.year, day_no)
        if (given_date < first_date):
            first_date = get_first_date_year(given_date.year-1, day_no)
        return first_date.year*100 + mt.ceil(((given_date - first_date).days+1)/7)
    
    FRIDAY = 4
    for i in range(20):
        given_date = dt.date(2018, 12, 23) + dt.timedelta(days=i)
        year_wk = get_yearwk_from_date(given_date, FRIDAY)
        print("Date: "+str(given_date)+", YearWeek: "+str(year_wk))
    

    输出:

    日期:2018-12-23,年周:201851
    日期:2018-12-24,年周:201851
    日期:2018-12-25,年周:201851
    日期:2018-12-26,年周:201851
    日期:2018-12-27,年周:201851
    日期:2018-12-28,年周:201852
    日期:2018-12-29,年周:201852
    日期:2018-12-30,年周:201852
    日期:2018-12-31,年周:201852
    日期:2019-01-01,年周:201852
    日期:2019-01-02,年周:201852
    日期:2019-01-03,年周:201852
    日期:2019-01-04,年周:201901
    日期:2019-01-05,年周:201901
    日期:2019-01-06,年周:201901
    日期:2019-01-07,年周:201901
    日期:2019-01-08,年周:201901
    日期:2019-01-09,年周:201901
    日期:2019-01-10,年周:201901
    日期:2019-01-11,年周:201902

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-03-24
      • 2016-11-29
      • 1970-01-01
      • 2012-11-27
      • 2018-07-25
      • 1970-01-01
      • 2019-11-20
      相关资源
      最近更新 更多