
In Python stellt das Kalendermodul der Standardbibliothek Funktionen bereit, um festzustellen, ob ein bestimmtes Jahr ein Schaltjahr ist oder nicht, und um die Anzahl der Schaltjahre in einem bestimmten Zeitraum zurückzugeben.
Dieser Artikel hat folgenden Inhalt.
- Der Algorithmus für Schaltjahre
- Feststellen, ob ein Jahr ein Schaltjahr ist:
calendar.isleap()
- Zählen Sie die Anzahl der Schaltjahre in einem bestimmten Zeitraum:
calendar.leapdays()
- Hören Sie Sie Schaltjahre in einem bestimmten Zeitraum auf
- Bestimmen Sie, ob ein datetime- oder date-Objekt ein Schaltjahr ist
Im following Artikel erfahren SIE, wie SIE mit dem Kalendermodul einen Text- oder HTML-Kalender erhalten.
Der Algorithmus für Schaltjahre
Der Algorithmus bestimmt, ob ein Jahr ein Schaltjahr oder ein gewöhnliches Jahr im gregorianischen Kalender ist, und wird durch den following Pseudocode dargestellt:
if (year is not divisible by 4) then (it is a common year)
else if (year is not divisible by 100) then (it is a leap year)
else if (year is not divisible by 400) then (it is a common year)
else (it is a leap year)
Feststellen, ob ein Jahr ein Schaltjahr ist:calendar.isleap()
Verwenden Sie „calendar.isleap()“, um zu prüfen, ob ein Jahr ein Schaltjahr ist oder nicht.
import calendar
print(calendar.isleap(2019))
# False
print(calendar.isleap(2020))
# True
print(calendar.isleap(1900))
# False
print(calendar.isleap(2000))
# True
Der Quellcode von kalender.isleap() sieht wie folgt aus. Der % (Modulo)-Operator und und, oder werden verwendet.
def isleap(year):
"""Return True for leap years, False for non-leap years."""
return year % 4 == 0 and (year % 100 != 0 or year % 400 == 0)
Zählen Sie die Anzahl der Schaltjahre in einem bestimmten Zeitraum:calendar.leapdays()
Use you calendar.leapdays(), um Schaltjahre in einem bestimmten Zeitraum zu umfassen.
Geben Sie zwei Jahre wie „calendar.leapdays(y1, y2)“ an. Der Zeitraum ist y1 <= x < y2, was y1, aber nicht y2 enthält.
print(calendar.leapdays(2019, 2030))
# 3
print(calendar.leapdays(2019, 2020))
# 0
Hören Sie Sie Schaltjahre in einem bestimmten Zeitraum auf
Um Schaltjahre in einem bestimmten Zeitraum aufzuhören, verwenden Sie „calendar.isleap()“ als Bedingung für das Listenverständnis.
print([y for y in range(2019, 2030) if calendar.isleap(y)])
# [2020, 2024, 2028]
print([y for y in range(2000, 2020) if calendar.isleap(y)])
# [2000, 2004, 2008, 2012, 2016]
Beachten Sie, dass im Fall von range(start, end) end nicht enthalten ist.
Bestimmen Sie, ob ein datetime- oder date-Objekt ein Schaltjahr ist
Die Standardbibliothek von Python hat ein datetime-Modul, das Datums- und Zeitangaben verarbeitet.
Das datetime-Modul stellt datetime.datetime für Datum und Uhrzeit und datetime.date nur für Datum bereit.
Sowohl datetime.datetime als auch datetime.date haben das year-Attribut. Wenn Sie überprüfen möchten, ob das von diesen Objekten angegebene Jahr ein Schaltjahr ist oder nicht, übergeben Sie das year-Attribut an Calendar.isleap().
import calendar
import datetime
dt = datetime.datetime(2019, 1, 1, 10, 10, 10)
print(dt)
# 2019-01-01 10:10:10
print(calendar.isleap(dt.year))
# False
d = datetime.date(2020, 1, 1)
print(d)
# 2020-01-01
print(calendar.isleap(d.year))
# True
Sie können beispielsweise sterben folgende Funktion definieren.
def isleap_datetime(dt):
return calendar.isleap(dt.year)
print(dt)
# 2019-01-01 10:10:10
print(isleap_datetime(dt))
# False
print(d)
# 2020-01-01
print(isleap_datetime(d))
# True
Wenn Sie das Kalendermodul nicht verwenden möchten, können Sie eine Funktion wie die folgenden definieren.
def isleap_datetime2(dt):
return dt.year % 4 == 0 and (dt.year % 100 != 0 or dt.year % 400 == 0)
print(dt)
# 2019-01-01 10:10:10
print(isleap_datetime2(dt))
# False
print(d)
# 2020-01-01
print(isleap_datetime2(d))
# True