Python日期格式1月1日,2012年1月31日

时间:2012-01-06 05:19:31

标签: python date

我想以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个月。  有任何想法吗???  请帮忙!!!!!

2 个答案:

答案 0 :(得分:1)

以下是使用datetimecalendar模块的解决方案:

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”就是一个例子