我想以jan 1,2012 - jan 31,2012格式显示日期 并获得一个包含日期范围的列表['jan 1,2012 - jan 31,2012','2011年12月1日 - 2011年12月31日','2011年11月1日 - 2011年11月3日'......'2月1日, 2011年 - 2011年2月28日']
即在本月之前的所有12个月。 有任何想法吗??? 请帮忙!!!!!
答案 0 :(得分:1)
以下是使用datetime和calendar模块的解决方案:
import calendar
import datetime
current = datetime.date.today().replace(day=1)
mylist = list()
for i in xrange(12):
rng = calendar.monthrange(current.year, current.month)
last = current.replace(day = rng[1])
mylist.append(current.strftime("%b 1, %Y") + " - " + last.strftime("%b %d, %Y"))
current = (current - datetime.timedelta(1)).replace(day=1)
print mylist
当我运行它时会打印:
['Jan 1, 2012 - Jan 31, 2012', 'Dec 1, 2011 - Dec 31, 2011', 'Nov 1, 2011 - Nov 30, 2011', 'Oct 1, 2011 - Oct 31, 2011', 'Sep 1, 2011 - Sep 30, 2011', 'Aug 1, 2011 - Aug 31, 2011', 'Jul 1, 2011 - Jul 31, 2011', 'Jun 1, 2011 - Jun 30, 2011', 'May 1, 2011 - May 31, 2011', 'Apr 1, 2011 - Apr 30, 2011', 'Mar 1, 2011 - Mar 31, 2011', 'Feb 1, 2011 - Feb 28, 2011']
答案 1 :(得分:0)
这有点像黑客,但希望有人能告诉你一个更好的方法:
由于期间没有那么多天,你可以用蛮力生成所有日期:
import datetime
for year in range(2011,2013):
for month in range(1,13):
for day in range(28,32):
try:
_date=datetime.date(year,month,day)
except ValueError:
print month,day
output:
2 29
2 30
2 31
4 31
6 31
9 31
11 31
2 30
2 31
4 31
6 31
9 31
11 31
基本上使用这种蛮力方法,你可以算出每个月的最大日期。
我建议: 使用这种技术,创建一个日期对象列表,代表每个月的最大日期。
创建每月第一天的日期对象列表。
对两个列表进行排序
压缩两个列表
对于从压缩列表中获取的每一对,使用strftime方法打印日期范围
e.g:
>>> datetime.date.today().strftime("%a")
'Fri'
如果你在页面的中间看http://docs.python.org/library/time.html,它会告诉你通过strftime来获得你想要的格式。 “%a”就是一个例子