2009-08-19 27 views
4

Ich habe ein Datum, das entweder in deutscher Sprache für zB formatiert ist,Umgang mit internationalen Daten in Python

2. Okt. 2009 

und vielleicht auch als

2. Oct. 2009 

Wie analysieren wir dies in einen ISO-Datetime (oder Python datetime)?

gelöst durch diesen Schnipsel mit:

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

Und dann in den entsprechenden für die Parameter l in setlocaleQ anschließen.

Kann analysieren

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

Antwort

9

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

Das datetime Modul bereits bekannt ist locale.

Es ist so etwas wie die folgenden

# 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

Dank. Ich musste nach unterstützten Gebietsschemas auf meinem Rechner suchen (siehe Bearbeiten), um den passenden deutschen Gebietsschemakenner zu finden. – geejay

+2

'type Objekt 'datetime.date' hat kein Attribut 'strptime'' (weder in 2.7 noch in 3.5). Verwenden Sie stattdessen 'datetime.strptime()'. – flaschbier

1

Sehr kleiner Punkt über Ihr Code-Snippet: Ich bin kein Python-Experte, aber ich würde die ganze Flagge für den Erfolg zu überprüfen betrachten + alle Ausnahmen leise schlucken schlecht zu sein bilden.

try/erwarten/sonst tut, was Sie in eine saubere Art und Weise wollen, denke ich:

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