我试图计算"一年中的几个星期"中两个日期之间的差异.我可以获取datetime对象并获取日期等但不是周数.当然,我不能减去日期,因为周末无法确保.
我尝试使用d1.isocalendar()[1]和减去周数,d2.isocalendar()[1]但问题是isocalendar()[1]返回December 31, 2012第1周(这应该是正确的),但这意味着我的逻辑不能超过这个日期.
作为参考,这是我的完整代码:
def week_no(self):
ents = self.course.courselogentry_set.all().order_by('lecture_date')
l_no = 1
for e in ents:
if l_no == 1:
starting_week_of_year = e.lecture_date.isocalendar()[1] # get week of year
initial_year = e.lecture_date.year
if e == self:
this_year = e.lecture_date.year
offset_week = (this_year - initial_year) * 52
w_no = e.lecture_date.isocalendar()[1] - starting_week_of_year + 1 + offset_week
break
l_no += 1
return w_no
Run Code Online (Sandbox Code Playgroud)
使用此代码,2012年12月31日的讲座最终为-35.
eum*_*iro 46
计算各个日期周内星期一之间的星期差异怎么样?在以下代码中,monday1是周一或之前d1(同一周):
from datetime import datetime, timedelta
monday1 = (d1 - timedelta(days=d1.weekday()))
monday2 = (d2 - timedelta(days=d2.weekday()))
print 'Weeks:', (monday2 - monday1).days / 7
Run Code Online (Sandbox Code Playgroud)
如果两个日期都在一周内,则返回0,如果连续两周,则返回1,等等.
小智 35
您可能想参考Python CookBook(2005版)Recipe 3.3.以下代码片段来自cookbook,满足您的需求.
from dateutil import rrule
import datetime
def weeks_between(start_date, end_date):
weeks = rrule.rrule(rrule.WEEKLY, dtstart=start_date, until=end_date)
return weeks.count()
Run Code Online (Sandbox Code Playgroud)
这是一个非常简单的解决方案,每个人都能理解的编码更少
from datetime import date
d1 = date(year, month, day)
d2 = date(year, month, day)
result = (d1-d2).days//7
Run Code Online (Sandbox Code Playgroud)