日期不按规定

时间:2017-01-15 02:24:30

标签: python python-2.7 calendar

为什么从12月开始?并且1 1最后重复。什么是更多的Pythonic方法来迭代一年中的所有日子(处理闰年)?

import calendar

a = calendar.Calendar(0)
for b in range(1,13):
    for x in a.itermonthdates(2016,b):
        print x.month, x.day

输出:

12 28
12 29
12 30
12 31
1 1
1 2
1 3
..
..
..

完整输出:

http://pastebin.com/nnP4ADQK

2 个答案:

答案 0 :(得分:3)

itermonthdates返回完整的周数:

  

itermonthdates(年,月)   返回年份中月月(1-12)的迭代器。此迭代器将返回月份的所有日期(作为datetime.date对象)以及月份开始之前或月末之后所需的一整天。

您可以拒绝年份不是2016年的日期:

import calendar

a = calendar.Calendar(0)
g = (x for b in xrange(1, 13) for x in a.itermonthdates(2016, b) if x.year == 2016)
print next(g)

输出:

2016-01-01

答案 1 :(得分:0)

itermonthdates 返回所有周,包括月中的几天。因此,应该检查所有月份。

import calendar 
a = calendar.Calendar(0)
for b in range(1,13):
    for x in a.itermonthdates(2017,b):
        if x.month==b:
            print x #x.month, x.day