Python 日期格式 从 2012 年 1 月 1 日到 2012 年 1 月 31 日

1 投票
2 回答
1214 浏览
提问于 2025-04-17 09:39

我想把日期显示成这样的格式:jan 1, 2012 - jan 31, 2012,并且想要得到一个列表,里面包含这些日期范围:['jan 1, 2012 - jan 31, 2012', 'December 1, 2011 - December 31, 2011', 'November 1, 2011 - November 30, 2011', ... 'February 1, 2011 - February 28, 2011']。

也就是说,想要列出当前月份之前的12个月的日期范围。有没有什么好主意???请帮帮我!!!!

2 个回答

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方法打印出你的日期范围。

例如:

>>> datetime.date.today().strftime("%a")
'Fri'

如果你查看一下 http://docs.python.org/library/time.html,在页面中间部分会告诉你如何传递参数给strftime,以获得你想要的格式。“%a”就是一个例子。

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']

撰写回答