views:

201

answers:

2

I have a date that is either formatted in German for e.g,

2. Okt. 2009

and also perhaps as

2. Oct. 2009

How do I parse this into an ISO datetime (or python datetime)?

Solved by using this snippet:

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

And then plugging in the appropriate for the parameter l in setlocale.

Can parse using

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

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

The datetime module is already locale aware.

It's something like the following

# 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" )
S.Lott
thanks. I had to search for supported locales on my machine (see edit) to find the appropriate German locale identifier.
geejay
A: 

Very minor point about your code snippet : I'm no python expert but I'd consider the whole flag to check for success + silently swallowing all exceptions to be bad form.

try/expect/else does what you want in a cleaner way, I think :

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
Bethor