3

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

我正在尝试使用

import datetime
datetime.date(2013, 12, 30).isocalendar()[1]

我得到的输出为

1

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

我在这里做错了什么?

4

2 回答 2

9

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]
于 2014-01-15T14:43:21.137 回答
0
from datetime import date
from datetime import datetime
ndate='10/1/2016'
ndate = datetime.strptime(ndate, '%m/%d/%Y').strftime('%Y,%m,%d')
print('new format:',ndate)
d=ndate.split(',')
wkno = date(int(d[0]),int(d[1]),int(d[2])).isocalendar()[1]
print(wkno)

手动或将日期读取到字符串并获取周数,使用不同的格式。

于 2016-11-23T22:36:24.223 回答