Anni a 2 cifre usando Strttime () non è in grado di analizzare i compleanni molto bene
-
17-09-2020 - |
Domanda
Considera i seguenti compleanni (come dob
):
- .
- 1-jun-68
- 1-jun-69
Quando analizzato con il datetime.strptime(dob, '%d-%b-%y')
di Python produrrà:
- .
-
datetime.datetime(2068, 6, 1, 0, 0)
-
datetime.datetime(1969, 6, 1, 0, 0)
Beh, certo che dovrebbero nascere nello stesso decennio ma ora non è nemmeno nello stesso secolo!
Secondo il Docs Questo è un comportamento perfettamente valido:
.Quando gli anni a 2 cifre sono accettati, vengono convertiti secondo Lo standard POSIX o X / OPEN: i valori 69-99 sono mappati al 1969-1999, e i valori 0-68 sono mappati a 2000-2068.
Capisco perché la funzione è impostata come questa, ma c'è un modo per aggirare questo?Forse con la definizione delle tue gamme per gli anni a 2 cifre?
Soluzione
Se lo stai sempre usando per i compleanni, solo sottrarre 100 se l'anno è dopo ora:
if d > datetime.now():
d = datetime(d.year - 100, d.month, d.day)
. Altri suggerimenti
Questa funzione sposta l'anno al 1950:
def millenium(year, shift=1950):
return (year-shift)%100 + shift
. Se ti aspetti un compleanno, potresti sempre semplicemente massaggiare manualmente i dati - qualsiasi data in futuro viene automaticamente restituito un secolo, o alcuni.