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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top