从周数获取日期
我想根据周数来获取一个日期,但遇到了一些麻烦。
date.weekday()
这个方法会返回星期几,其中0代表星期一,6代表星期天。
而 date.strftime()
和 date.strptime()
中的 %w
指令则是把0当作星期天,6当作星期六。
这就导致了在根据 date.weekday()
得到的周数来算日期时,出现了一些非常烦人的问题。
有没有更好的方法可以根据周数来获取日期呢?
编辑:
我添加了一个例子。
import datetime
original_date = datetime.date(2014, 8, 24)
week_of_the_date = original_date.isocalendar()[1] # 34
day_of_the_date = original_date.isocalendar()[2] # 7
temp = '{0} {1} {2}'.format(*(2014, week_of_the_date, day_of_the_date-1))
date_from_week = datetime.datetime.strptime(temp, '%Y %W %w')
week_from_new_date = date_from_week.isocalendar()[1] # 35!!
编辑 2:
最后我把日期的相关内容放在了视图中(使用 jQuery UI),这样对周的理解更加一致。
1 个回答
2
我觉得在使用 weekday
和 strftime
时,关于周日和周一的区别其实没什么大不了的。你可以用 isoweekday
来让它们对齐,或者如果你想把周日当作一周的第一天,可以在 strftime
中使用 %U
。真正的问题是,strftime
这个函数(它是基于C语言的一个函数)对一年第一周的定义和ISO标准是不一样的。根据 %W
的说明:“新年里在第一个周一之前的所有天都被认为是第0周”。而ISO日历则是把包含第一个星期四的那一周视为第一周,具体原因我也不太明白。
我找到两种方法来处理ISO周,既可以返回 datetime.date
实例,也支持多种操作,分别是:
- 一种简单的
timedelta
方法,具体可以参考这个回答:如何找到 datetime.isocalendar() 的反向操作? - 还有一个第三方库:https://pypi.python.org/pypi/isoweek/