2017-01-15 9 views
0

Warum beginnt es mit Dezember? Und 1 1 wiederholt sich am Ende. Was ist der pythonische Weg, um über alle Tage in einem bestimmten Jahr (mit dem Schaltjahr) zu iterieren?Daten außerhalb der Reihenfolge

import calendar 

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

Ausgang:

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

Volle Leistung:

http://pastebin.com/nnP4ADQK

Antwort

2

itermonthdates kehrt komplette Wochen:

itermonthdates (Jahr, Monat) Geben Sie einen Iterator für den Monat (1-12) im Jahr zurück. Dieser Iterator gibt alle Tage (als datetime.date-Objekte) für den Monat und alle Tage vor dem Anfang des Monats oder nach dem Ende des Monats zurück, die erforderlich sind, um eine vollständige Woche zu erhalten.

könnten Sie einfach ablehnen die Daten in dem Jahr nicht 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) 

Ausgang:

2016-01-01 
0

itermonthdates gibt alle Wochen, die Tage des Monats enthält. Also sollte die Überprüfung für alle Monate durchgeführt werden.

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 
Verwandte Themen