2 chiffres à l'aide de strptime() n'est pas en mesure d'analyser les anniversaires très bien

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

  •  17-09-2020
  •  | 
  •  

Question

Considérez les points suivants anniversaires (comme dob):

  • 1-Juin-68
  • 1-Juin-69

Lorsque analysé avec Python datetime.strptime(dob, '%d-%b-%y') rendement:

  • datetime.datetime(2068, 6, 1, 0, 0)
  • datetime.datetime(1969, 6, 1, 0, 0)

Bien sûr, ils sont censés être nés dans la même décennie, mais maintenant il n'est même pas dans le même siècle!

Selon l' docs c'est parfaitement valide comportement:

Lorsque les années à 2 chiffres sont acceptés, ils sont convertis selon POSIX ou X/Open standard:les valeurs 69-99 sont mappés à 1969-1999, et les valeurs 0-68 sont mappés à 2000-2068.

Je comprends pourquoi la fonction est mis en place comme cela, mais est-il un moyen de contourner cela?Peut-être avec la définition de vos propres gammes pour les années à 2 chiffres?

Était-ce utile?

La solution

Si vous êtes toujours en train de l'utiliser pour les anniversaires, juste soustraire 100 si l'année est après maintenant:

if d > datetime.now():
    d = datetime(d.year - 100, d.month, d.day)

Autres conseils

Cette fonction de quarts de l'année 1950:

def millenium(year, shift=1950):
    return (year-shift)%100 + shift

Si vous vous attendez à un anniversaire, vous pouvez toujours juste manuellement massage les données d'une date quelconque dans l'avenir est réglé automatiquement en arrière d'un siècle, ou quelque chose du genre.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top