Question

Je vais avoir un mauvais moment avec la date et l'analyse syntaxique mise en forme aujourd'hui.

Points pour quelqu'un qui peut analyser ce format de date dans un datetime.date ou datetime.datetime (je ne suis pas trop pointilleux mais je préfère .date):

5th November 2010

Était-ce utile?

La solution

dateutil :

In [2]: import dateutil.parser as dparser

In [3]: date = dparser.parse('5th November 2010')

In [4]: date
Out[4]: datetime.datetime(2010, 11, 5, 0, 0)

Autres conseils

Malheureusement, strptime n'a pas de caractères de format pour « sauter un suffixe ordinal » -, je ferais sauter la première, avec un peu de RE, puis analyser la chaîne résultante « claire ». I.e.:.

>>> import re
>>> import datetime
>>> ordn = re.compile(r'(?<=\d)(st|nd|rd|th)\b')
>>> def parse(s):
...   cleans = ordn.sub('', s)
...   dt = datetime.datetime.strptime(cleans, '%d %B %Y')
...   return dt.date()
... 
>>> parse('5th November 2010')
datetime.date(2010, 11, 5)

Votre préférence pour date vs datetime est pas un problème bien sûr, c'est ce que la méthode .date() des objets datetime est pour; -).

Les extensions tierces comme dateutil peut être utile si vous avez besoin de faire beaucoup de « floue » l'analyse syntaxique de la date (ou d'autres choses liées à la date de fantaisie ;-), par la manière.

Si l'ordinal est alors constante:

datetime.strptime(s, '%dth %B %Y')

Else:

date_str = '5th November 2010'
modified_date_str = date_str[0:1] + date_str[3:]
datetime.strptime(modified_date_str, '%d %B %Y')

Ou comme ~ unutbu dit :) utiliser dateutil

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