Gibt es eine Möglichkeit, mit Python's Standardbibliothek leicht zu bestimmen (d.h. ein Funktionsaufruf) den letzten Tag eines bestimmten Monats?
Wenn die Standardbibliothek dies nicht unterstützt, unterstützt das dateutil-Paket dies?
Gibt es eine Möglichkeit, mit Python's Standardbibliothek leicht zu bestimmen (d.h. ein Funktionsaufruf) den letzten Tag eines bestimmten Monats?
Wenn die Standardbibliothek dies nicht unterstützt, unterstützt das dateutil-Paket dies?
Verwendung von dateutil.relativedelta
erhalten Sie das letzte Datum des Monats wie folgt:
from dateutil.relativedelta import relativedelta
last_date_of_month = datetime(mydate.year, mydate.month, 1) + relativedelta(months=1, days=-1)
Die Idee ist, den ersten Tag des Monats zu ermitteln und die relativedelta
um 1 Monat voraus und 1 Tag zurück zu gehen, so dass Sie den letzten Tag des gewünschten Monats erhalten würden.
In Python 3.7 gibt es die undokumentierten calendar.monthlen(year, month)
機能 :
>>> calendar.monthlen(2002, 1)
31
>>> calendar.monthlen(2008, 2)
29
>>> calendar.monthlen(2100, 2)
28
Dies entspricht die dokumentierten calendar.monthrange(year, month)[1]
aufrufen .
Dies scheint unter Python 3.8.1 nicht zu funktionieren: AttributeError: Modul 'Kalender' hat kein Attribut 'monthlen'
@jeppoo1: ja, es ist als privat gekennzeichnet in bpo-28292 -- erwartet für eine undokumentierte Funktion.
Es funktioniert. any_day ist der 31. Januar, wir ersetzen day durch 1, also der 1. Januar, addieren 32 Tage und erhalten den 2. Februar, ersetzen wieder durch day=1 und erhalten den 1. Februar. Ziehen Sie einen Tag ab und erhalten den 31. Januar. Ich verstehe nicht, wo das Problem liegt. Welchen Tag erhältst du?
Eine andere Lösung wäre, wie folgt vorzugehen:
from datetime import datetime
def last_day_of_month(year, month):
""" Work out the last day of the month """
last_days = [31, 30, 29, 28, 27]
for i in last_days:
try:
end = datetime(year, month, i)
except ValueError:
continue
else:
return end.date()
return None
Und verwenden Sie die Funktion wie folgt:
>>>
>>> last_day_of_month(2008, 2)
datetime.date(2008, 2, 29)
>>> last_day_of_month(2009, 2)
datetime.date(2009, 2, 28)
>>> last_day_of_month(2008, 11)
datetime.date(2008, 11, 30)
>>> last_day_of_month(2008, 12)
datetime.date(2008, 12, 31)
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.