2-stellige Jahreszahlen mit strptime() können Geburtstage nicht sehr gut analysieren
-
17-09-2020 - |
Frage
Betrachten Sie die folgenden Geburtstage (wie dob
):
- 1. Juni 68
- 1. Juni 69
Beim Parsen mit Python datetime.strptime(dob, '%d-%b-%y')
ergibt:
datetime.datetime(2068, 6, 1, 0, 0)
datetime.datetime(1969, 6, 1, 0, 0)
Natürlich sollen sie im selben Jahrzehnt geboren sein, aber jetzt ist es nicht einmal im selben Jahrhundert!
Entsprechend der Dokumente Das ist ein vollkommen gültiges Verhalten:
Wenn 2-stellige Jahre akzeptiert werden, werden sie gemäß dem POSIX- oder X/Open-Standard konvertiert:Die Werte 69-99 sind 1969-1999 und die Werte 0–68 auf 2000–2068 zugeordnet.
Ich verstehe, warum die Funktion so eingerichtet ist, aber gibt es eine Möglichkeit, dies zu umgehen?Vielleicht mit der Definition eigener Bereiche für zweistellige Jahreszahlen?
Lösung
Wenn Sie es immer für Geburtstage verwenden, subtrahieren Sie einfach 100, wenn das Jahr danach liegt:
if d > datetime.now():
d = datetime(d.year - 100, d.month, d.day)
Andere Tipps
Diese Funktion verschiebt das Jahr auf 1950:
def millenium(year, shift=1950):
return (year-shift)%100 + shift
Wenn Sie einen Geburtstag erwarten, können Sie die Daten jederzeit manuell massieren – jedes Datum in der Zukunft wird automatisch um ein Jahrhundert oder so zurückgesetzt.