在python中使用日期获取周数

Nis*_*ede 2 python datetime iso8601 week-number python-datetime

日期是 datetime.date(2013, 12, 30)

我正在尝试使用周数

import datetime
datetime.date(2013, 12, 30).isocalendar()[1]
Run Code Online (Sandbox Code Playgroud)

我得到输出,

1
Run Code Online (Sandbox Code Playgroud)

为什么我没有得到去年的周数,而是我得到当年的周数?

我在做什么错了?

Mar*_*ers 8

2013/12/30根据ISO8601周编号标准,您在2014年第1周没有做错任何错误:

第01周的ISO 8601定义是其中第一个星期四的一周.

那个星期的星期四是2014/01/02.

其他解释定义的方法,来自同一个链接的WikiPedia文章:

  • 这是第一周,其1月份的大部分时间(四个或更多)(ISO星期一开始)
  • 第一天是最接近1月1日的星期一.
  • 它有1月4日.因此,最早可能的日期是12月29日至1月4日,即1月4日至10日.
  • 如果星期六,星期日和1月1日不是工作日,它有一年的第一个工作日.

如果您正在寻找给定年份的最后一周数字(52或53,取决于年份),我将使用12月28日,这始终保证在上周(因为1月4日始终是第二年的第一周):

def lastweeknumber(year):
    return datetime.date(year, 12, 28).isocalendar()[1]
Run Code Online (Sandbox Code Playgroud)