2010-08-11 15 views
3

Je vais avoir un mauvais moment avec l'analyse de la date et le formatage aujourd'hui.Parse cette date en Python: 5 Novembre 2010

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

Répondre

17

En utilisant 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) 
+0

+1. Élégant et Pythonique. –

+0

'dateutil' est certainement le plus propre. – Oli

5

Si l'ordinal est constant, alors:

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 said utilisation dateutil :)

+1

Votre deuxième solution ne fonctionnerait pas très bien si 'date_str' était, disons, '25th November 2010' - c'est pourquoi dans mon A j'utilise un RE, plutôt que le tranchage de chaîne, pour enlever le suffixe ordinale;). –

+0

@Alex: Vous avez raison. Une sorte de correspondance/nettoyage * est * requise. –

10

Malheureusement, strptime n'a pas de caractères de format pour "sauter un suffixe ordinal" -, je ferais sauter la première, avec un peu RE, puis analyser la chaîne "clear" qui en résulte. 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() de datetime objets est pour ;-).

Les extensions tierces comme dateutil peuvent être utiles si vous avez besoin de faire beaucoup d'analyse de date "floue" (ou d'autres trucs liés à la date ;-), soit dit en passant.

+0

+1 pour ne pas inclure un module tiers. Bien que le paquetage dateutil soit génial, il peut parfois être difficile d'installer des modules tiers (surtout lorsque le développeur n'a pas 100% de contrôle sur l'environnement) – shaune