904 Stimmen

Wie kann man den letzten Tag des Monats ermitteln?

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?

13voto

Siddharth K Punkte 101

Um das letzte Datum des Monats zu erhalten, gehen wir folgendermaßen vor:

from datetime import date, timedelta
import calendar
last_day = date.today().replace(day=calendar.monthrange(date.today().year, date.today().month)[1])

Um nun zu erklären, was wir hier tun, werden wir es in zwei Teile aufteilen:

Zunächst wird die Anzahl der Tage des aktuellen Monats ermittelt, für die wir die Monatsbereich Blair Conrad hat seine Lösung bereits erwähnt:

calendar.monthrange(date.today().year, date.today().month)[1]

zweitens das letzte Datum selbst, das wir mit Hilfe von ersetzen. z.B.

>>> date.today()
datetime.date(2017, 1, 3)
>>> date.today().replace(day=31)
datetime.date(2017, 1, 31)

und wenn wir sie wie oben erwähnt kombinieren, erhalten wir eine dynamische Lösung.

0 Stimmen

Obwohl dieser Code zur Lösung des Problems beitragen kann, erklärt er nicht warum und/oder wie beantwortet sie die Frage. Die Bereitstellung dieses zusätzlichen Kontextes würde den langfristigen pädagogischen Wert des Textes erheblich verbessern. Bitte bearbeiten fügen Sie Ihrer Antwort eine Erklärung hinzu, einschließlich der Einschränkungen und Annahmen, die gelten.

0 Stimmen

Das scheint am einfachsten zu sein. Wenn Sie bereit sind, zwei Zeilen zu schreiben, können Sie eine schöne date.replace(day=day) damit jeder weiß, was vor sich geht.

13voto

Blake Punkte 1073

Wenn Sie bereit sind, eine externe Bibliothek zu verwenden, schauen Sie sich http://crsmithdev.com/arrow/

Sie können dann den letzten Tag des Monats mit erhalten:

import arrow
arrow.utcnow().ceil('month').date()

Das Ergebnis ist ein Datumsobjekt, das Sie dann manipulieren können.

12voto

Steve Schulist Punkte 831

Nimm Pandas!

def isMonthEnd(date):
    return date + pd.offsets.MonthEnd(0) == date

isMonthEnd(datetime(1999, 12, 31))
True
isMonthEnd(pd.Timestamp('1999-12-31'))
True
isMonthEnd(pd.Timestamp(1965, 1, 10))
False

3 Stimmen

Können Sie auch mit pd.series.dt.is_month_end lien

2 Stimmen

Pandas datetime-Objekt hat eine spezielle Methode dafür: now=datetime.datetime.now(); pd_now = pd.to_datetime(now); print(pd_now.days_in_month)

0 Stimmen

Um die letzte beliebige Einheit des Monats zu erhalten, siehe diese Antwort .

12voto

Piero Punkte 958

Für mich ist der einfachere Weg die Verwendung von Pandas (Zwei-Zeilen-Lösung):

    from datetime import datetime
    import pandas as pd

    firstday_month = datetime(year, month, 1)
    lastday_month = firstday_month + pd.offsets.MonthEnd(1)

Eine andere Möglichkeit ist: Man nimmt den ersten Tag des Monats, addiert dann einen Monat und zieht einen Tag ab:

    from datetime import datetime
    import pandas as pd

    firstday_month = datetime(year, month, 1)
    lastday_month = firstday_month + pd.DateOffset(months=1) - pd.DateOffset(days=1)

10voto

Das ist mein Weg - eine Funktion mit nur zwei Zeilen:

from dateutil.relativedelta import relativedelta

def last_day_of_month(date):
    return date.replace(day=1) + relativedelta(months=1) - relativedelta(days=1)

from datetime import date

print(last_day_of_month(date.today()))
>> 2021-09-30

CodeJaeger.com

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.

Powered by:

X