Seite 1 von 1

Letzter Tag eines Monates ermitteln

Verfasst: Sonntag 20. August 2006, 14:58
von DatenMetzgerX
Hallo

Ich wollte alle Einträge die Seit dem z.B. 01.02.2006 bis 28.02.2006 auslesen.
Nun suche ich eine Funktion, die mir den letzten Tag eines bestimmten Monats zurück gibt.

z.B ich sage Monat 3 (wenn nötig auch das Jahr mitgeben) und er gibt mir den Grösten Tag zurück.

Gibts da schon was vorgebackenes?

Gruess
DM

Verfasst: Sonntag 20. August 2006, 15:21
von jAN

Code: Alles auswählen

import calendar
anzahltage=calendar.monthrange(jahr,monat)[1]

Verfasst: Sonntag 20. August 2006, 15:30
von BlackJack
Das kann man sich recht einfach selbst basteln, aber kannst Du nicht `datetime.date` Objekte benutzen und das Enddatum einfach "exclusive" angeben? Also als Enddatum 2006-03-01 und dann testen ob das bearbeitete Datum kleiner ist.

Code: Alles auswählen

import datetime

def daterange(start, end):
    one_day = datetime.timedelta(days=1)
    while start < end:
        yield start
        start += one_day

for date in daterange(datetime.date(2006, 2, 1), datetime.date(2006, 3, 1)):
    print date

Verfasst: Sonntag 20. August 2006, 17:20
von rayo
Hi

Also ich hätte spontan einfach einen Monat dazugezählt und dann einen Tag weg.

Code: Alles auswählen

import datetime

def end_of_month(month, year):
    if month == 12:
        month = 1
        year += 1
    else:
        month += 1
    return datetime.date(year, month,1)-datetime.timedelta(days=1)

print end_of_month(1,2006)    #2006-01-31
print end_of_month(3,2006)    #2006-03-31
print end_of_month(12,2006)   #2006-12-31
*edit* kannst du nicht direkt einfach den Monat und das Jahr vergleichen? Im Stil von "Gib mir alle Daten mit dem Monat 2 und dem Jahr 2006".

Gruss

Verfasst: Sonntag 20. August 2006, 17:24
von gerold
Hi!

Und hier noch einer von mir:

Code: Alles auswählen

import datetime
datetime.datetime(2006, 8, 1) - datetime.timedelta(1)
lg
Gerold
:-)

Edit: Ich sehe soeben, dass rayo den gleichen Gedanken hatte. :-)

Verfasst: Montag 21. August 2006, 12:26
von Joghurt
Ich hätte jetzt einfach:

Code: Alles auswählen

def Tage(monat, jahr):
  if monat==2:
    if jahr%4 == 0 and (jahr%100 != 0 or jahr%400 == 0):
      return 29
    else:
      return 28
  else:
     return 31-(monat-1)%7%2
geschrieben 8)