在上周,本周和下周建立日期数组 [英] Build array of dates in last week, this week and next week

查看:127
本文介绍了在上周,本周和下周建立日期数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

对于Python中的日期,我一直在绊倒事物。在我的webapp中,我想每天显示三个星期的日历:上周,本周和下周,星期一表示一周的开始。



我目前的方法是回溯到日期,直到我星期一到达,然后再减去七天,然后添加20来建立三周的范围...但这感觉真的笨拙的。



Python的概念有几周,还是我必须用日子手动打包?



编辑:现在我把它编码出来,这不是太可怕了,但是我想知道是否没有什么更好的东西,再一次是一个星期而不是几天的概念。

  today = datetime.date.today()
last_monday = today - datetime.timedelta(days = today.weekday()) - datetime.timedelta(days = 7)
dates = [last_monday + datetime.timedelta(days = i)for i in range(0,21)]


解决方案

不,这几乎是这样。但是根据 datetime的列表理解.date.weekday() 结果应该很简单:

  today = datetime.date(2013,06,26)
dates = [today + datetime.timedelta(days = i)for i in range(-7 - today.weekday(),14 - today.weekday())]

记住,范围不要从0开始:-)



演示:

 >>> import datetime 
>>>>来自pprint import pprint
>>>> today = datetime.date(2013,07,12)
>>> pprint([today + datetime.timedelta(days = i)for i in range(-7 - today.weekday(),14 - today.weekday())])
[datetime.date(2013, 1),
datetime.date(2013,7,2),
datetime.date(2013,7,3),
datetime.date(2013,7,4),
datetime.date(2013,7,5),
datetime.date(2013,7,6),
datetime.date(2013,7,7),
datetime.date (2013,7,8),
datetime.date(2013,7,9),
datetime.date(2013,7,10),
datetime.date(2013, 11),
datetime.date(2013,7,12),
datetime.date(2013,7,13),
datetime.date(2013,7,14),
datetime.date(2013,7,15),
datetime.date(2013,7,16),
datetime.date(2013,7,17),
datetime.date (2013,7,18),
datetime.date(2013,7,19),
datetime.date(2013,7,20),
datetime.date(2013, 21)]


I'm constantly tripping over things with regards to dates in Python. In my webapp I want to show every day of three weeks of a calendar: The last week, the current week and the following week, with Monday denoting the beginning of a week.

The way I would currently approach this is stepping back through dates until I hit Monday and then subtract a further seven days and then add 20 to build the three-week range... But this feels really clunky.

Does Python's have a concept of weeks or do I have to manually bodge it around with days?

Edit: Now I code it out, it's not too horrific but I do wonder if there's not something slightly better, again with a concept of weeks rather than just days.

today = datetime.date.today()
last_monday = today - datetime.timedelta(days=today.weekday()) - datetime.timedelta(days=7)
dates = [last_monday + datetime.timedelta(days=i) for i in range(0, 21)]

解决方案

Nope, that's pretty much it. But a list comprehension, basing off the datetime.date.weekday() result, should be easy enough:

today = datetime.date(2013, 06, 26)
dates = [today + datetime.timedelta(days=i) for i in range(-7 - today.weekday(), 14 - today.weekday())]

Remember, ranges do not have to start at 0. :-)

Demo:

>>> import datetime
>>> from pprint import pprint
>>> today = datetime.date(2013, 07, 12)
>>> pprint([today + datetime.timedelta(days=i) for i in range(-7 - today.weekday(), 14 - today.weekday())])
[datetime.date(2013, 7, 1),
 datetime.date(2013, 7, 2),
 datetime.date(2013, 7, 3),
 datetime.date(2013, 7, 4),
 datetime.date(2013, 7, 5),
 datetime.date(2013, 7, 6),
 datetime.date(2013, 7, 7),
 datetime.date(2013, 7, 8),
 datetime.date(2013, 7, 9),
 datetime.date(2013, 7, 10),
 datetime.date(2013, 7, 11),
 datetime.date(2013, 7, 12),
 datetime.date(2013, 7, 13),
 datetime.date(2013, 7, 14),
 datetime.date(2013, 7, 15),
 datetime.date(2013, 7, 16),
 datetime.date(2013, 7, 17),
 datetime.date(2013, 7, 18),
 datetime.date(2013, 7, 19),
 datetime.date(2013, 7, 20),
 datetime.date(2013, 7, 21)]

这篇关于在上周,本周和下周建立日期数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆