Anni a 2 cifre usando Strttime () non è in grado di analizzare i compleanni molto bene

StackOverflow https://stackoverflow.com/questions/3283209

  •  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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top