2009-08-19 9 views
4

j'ai une date qui est soit formaté en allemand par exemple,Gestion des dates internationales en python

2. Okt. 2009 

et aussi peut-être

2. Oct. 2009 

Comment puis-je analyser cela en une datetime ISO (ou python datetime)?

Résolu en utilisant cet extrait:

for l in locale.locale_alias: 
    worked = False 
    try: 
     locale.setlocale(locale.LC_TIME, l) 
     worked = True 
    except: 
     worked = False 
    if worked: print l 

Et puis le brancher dans le approprié pour le paramètre l dans setlocale.

peut analyser à l'aide

import datetime 
print datetime.datetime.strptime("09. Okt. 2009", "%d. %b. %Y") 

Répondre

9

http://docs.python.org/library/locale.html

Le module est datetime paramètres régionaux déjà au courant.

Il est quelque chose comme

# German locale 
loc= locale.setlocale(locale.LC_TIME,("de","de")) 
try: 
    date= datetime.date.strptime(input, "%d. %b. %Y") 
except: 
    # English locale 
    loc= locale.setlocale(locale.LC_TIME,("en","us")) 
    date= datetime.date.strptime(input, "%d. %b. %Y") 
+0

merci. J'ai dû rechercher les paramètres régionaux pris en charge sur ma machine (voir modifier) ​​pour trouver l'identificateur de paramètres régionaux allemand approprié. – geejay

+2

'type object 'datetime.date' n'a pas d'attribut 'strptime'' (ni dans 2.7 ni dans 3.5). Utilisez 'datetime.strptime()' à la place. – flaschbier

1

Point très mineur de votre extrait de code: Je ne suis pas expert en python, mais je considère que l'ensemble indicateur pour vérifier la réussite + avaler en silence toutes les exceptions à être mauvais forme.

essayer/expect/autre ne le sait ce que vous voulez d'une manière plus propre, je pense:

for l in locale.locale_alias: 
    try: 
     locale.setlocale(locale.LC_TIME, l) 
    except locale.Error: # the doc says setlocale should throw this on failure 
     pass 
    else: 
     print l