【问题标题】:Algorithm to get the current week number (not ISO)获取当前周数的算法(不是 ISO)
【发布时间】:2014-03-21 04:25:39
【问题描述】:

我正在寻找一种在 Python 中获取当前周数的简单方法。我很清楚标准库中的 datetime.datetime.isocalendar() 函数,但是这个函数规定第 1 周是新年的第一个星期一。我的困境是我使用星期日作为每周的起点,如果星期日是例如 12 月 27 日,而 1 月 1 日出现在该周的某个时间点,我需要将该周表示为第 1 周(和 2015 年) .

我想过做一些类似(伪代码)的事情:

if (Jan 1) - (current_sunday) < 7 days:
    week_num = 1

然后将该周数存储在某个地方以在下周迭代。但是,我觉得这是一种非常 hackish 的方法,并且更喜欢更清洁的方法。

【问题讨论】:

    标签: python datetime


    【解决方案1】:

    一般获取当前周数(从周日开始):

    >>> import datetime
    >>> import calendar
    >>> today = datetime.date.today())
    >>> (int(today.strftime('%U')) + (datetime.date(today.year+1, 1, 1).weekday() != calendar.SUNDAY)) % 53
    12
    

    来自strftime('%U')的文档:

    “一年中的周数(星期天作为一周的第一天),十进制数 [00,53]。在第一个星期日之前的新年中的所有天都被认为是在第 0 周。”

    因此针对您的特定要求修改了代码。没有真正的非 hacky 方式来做你想做的事。

    【讨论】:

    • +1。你也可以import time; time.strftime('%U')。 OP想要this number + 1
    • 这是我正在寻找的东西,但不完全是。我需要每周考虑,没有“部分”周。 2014 年 12 月 28 日星期日,使用您的代码会给我 52,但由于年份在那一周交叉,我希望它是 1。
    • 2017-01-01 是星期日,%U 返回 1 而不是 0。公式可以是%U + (1st Jan is not Sun)(date(today.year,1,1).weekday() != calendar.SUNDAY)
    • @JonMartin: (%U modulo 52) + (1st Jan is not Sun)
    • @J.F. Sebastian 我如何将该伪代码转换为可以添加到我的答案中的工作 Python?
    猜你喜欢
    • 2015-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-14
    • 1970-01-01
    • 2019-02-04
    相关资源
    最近更新 更多