倒计时4周(一星期一周)回到python / django [英] countdown 4 weeks (week by week) back with python/django
本文介绍了倒计时4周(一星期一周)回到python / django的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
这是我现在所在: / p>
def FourWeeks(year,week):
d = date(year,1,1)
delta_days = d.isoweekday() - 1
fourweekback = [week-x for x in range(4)]
for delta_weeks in fourweekback:
delta = timedelta(days = -delta_days,weeks = delta_weeks )
weekbeg = datetime.datetime.combine(d,datetime.time(00,00,01))+ delta
delta2 = timedelta(days = 6-delta_days,weeks = delta_weeks)
weekend = datetime.datetime.combine(d,datetime.time(23,59,59))+ delta2
return(fourweekback,weekbeg,weekend)
从此输出:
FourWeeks(2013,44)
([40,39,38,37],datetime.datetime(2013,10,7,0,0,1),datetime.datetime(2013,10,13,23,59,59))
([40,39,38,37],dateti me.datetime(2013,9,30,0,0,1),datetime.datetime(2013,10,6,23,59,59))
([40,39,38,37],datetime .datetime(2013,9,23,0,0,1),datetime.datetime(2013,9,29,23,59,59))
([40,39,38,37],datetime。 datetime(2013,9,16,0,0,1),datetime.datetime(2013,9,22,23,59,59))
([40,39,38,37],datetime.datetime (2013,9,16,0,0,1),datetime.datetime(2013,9,22,23,59,59))
这是我想要实现的:
FourWeeks(2013,44)
(44,datetime.datetime(2013,10,28,0,0,1),datetime.datetime(2013,11,3,23,59,59))
(39,datetime.datetime (2013,9,23,0,0,1),datetime.datetime(2013,9,29,23,59,59))
(38,datetime.datetime(2013,9,16,0, 0,1),datetime.datetime(2013,9,22,23,59,59))
(37,datetime.datetime(2013,9,9,0,0,1),datetime.datetime 2013,9,15,23,59,59))
在下一步我喜欢make a曲与周贝,周末
cursor.execute(SELECT * FROM event WHERE datetime BETWEEN%s AND%s,[weekbeg,周末])
任何想法我该怎么做?
解决方案
您应该能够适应以下内容(请注意它使用第三方 dateutil
,这可以通过pip轻松安装&安培; co):
from dateutil.relativedelta importreativedelta
from dateutil.rrule import rrule,WEEKLY,MO,SU
from datetime import datetime,timedelta
def four_weeks(year,week):
end = datetime(year,1,1)+ relativedelta(weeks = week-1,weekday = SU)
start = end - relativedelta(weeks = 4,weekday = MO)
mint,maxt = datetime.min.time(),datetime.max.time()
for dt rrule(WEEKLY,start,count = 4):
yield dt.combine(dt,mint),dt.combine(dt + timedelta(days = 6),maxt)
,结束于四周(2013,44):
print start,' - >',end
输出:
2013-10-07 00:00:00 - > 2013-10-13 23:59:59.999999
2013-10-14 00:00:00 - > 2013-10-20 23:59:59.999999
2013-10-21 00:00:00 - > 2013-10-27 23:59:59.999999
2013-10-28 00:00:00 - > 2013-11-03 23:59:59.999999
Could someone know how I can do countdown 4 weeks back with given year and later count start_date and end_date of each week?
This is what I have now:
def FourWeeks(year, week):
d = date(year, 1, 1)
delta_days = d.isoweekday() - 1
fourweekback = [week - x for x in range(4)]
for delta_weeks in fourweekback:
delta = timedelta(days=-delta_days, weeks=delta_weeks)
weekbeg = datetime.datetime.combine(d, datetime.time(00, 00, 01)) + delta
delta2 = timedelta(days=6-delta_days, weeks=delta_weeks)
weekend = datetime.datetime.combine(d, datetime.time(23, 59, 59)) + delta2
return (fourweekback, weekbeg, weekend)
output from this:
FourWeeks(2013, 44)
([40, 39, 38, 37], datetime.datetime(2013, 10, 7, 0, 0, 1), datetime.datetime(2013, 10, 13, 23, 59, 59))
([40, 39, 38, 37], datetime.datetime(2013, 9, 30, 0, 0, 1), datetime.datetime(2013, 10, 6, 23, 59, 59))
([40, 39, 38, 37], datetime.datetime(2013, 9, 23, 0, 0, 1), datetime.datetime(2013, 9, 29, 23, 59, 59))
([40, 39, 38, 37], datetime.datetime(2013, 9, 16, 0, 0, 1), datetime.datetime(2013, 9, 22, 23, 59, 59))
([40, 39, 38, 37], datetime.datetime(2013, 9, 16, 0, 0, 1), datetime.datetime(2013, 9, 22, 23, 59, 59))
and this is what I wanted to achieve:
FourWeeks(2013, 44)
(44, datetime.datetime(2013, 10, 28, 0, 0, 1), datetime.datetime(2013, 11, 3, 23, 59, 59))
(39, datetime.datetime(2013, 9, 23, 0, 0, 1), datetime.datetime(2013, 9, 29, 23, 59, 59))
(38, datetime.datetime(2013, 9, 16, 0, 0, 1), datetime.datetime(2013, 9, 22, 23, 59, 59))
(37, datetime.datetime(2013, 9, 9, 0, 0, 1), datetime.datetime(2013, 9, 15, 23, 59, 59))
In the next step I like make a query with weekbeg, weekend
cursor.execute("SELECT * FROM event WHERE datetime BETWEEN %s AND %s, [weekbeg, weekend] )
Any idea how I can do this?
解决方案
You should be able to adapt the following (note it uses the 3rd party dateutil
which is easily installable via pip & co):
from dateutil.relativedelta import relativedelta
from dateutil.rrule import rrule, WEEKLY, MO, SU
from datetime import datetime, timedelta
def four_weeks(year, week):
end = datetime(year, 1, 1) + relativedelta(weeks=week-1, weekday=SU)
start = end - relativedelta(weeks=4, weekday=MO)
mint, maxt = datetime.min.time(), datetime.max.time()
for dt in rrule(WEEKLY, start, count=4):
yield dt.combine(dt, mint), dt.combine(dt + timedelta(days=6), maxt)
for start, end in four_weeks(2013, 44):
print start, '->', end
Output:
2013-10-07 00:00:00 -> 2013-10-13 23:59:59.999999
2013-10-14 00:00:00 -> 2013-10-20 23:59:59.999999
2013-10-21 00:00:00 -> 2013-10-27 23:59:59.999999
2013-10-28 00:00:00 -> 2013-11-03 23:59:59.999999
这篇关于倒计时4周(一星期一周)回到python / django的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文