6

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

2. Okt. 2009

and also perhaps as

2. Oct. 2009

How do I convert 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")

2 Answers 2

11

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")
        
Sign up to request clarification or add additional context in comments.

2 Comments

thanks. I had to search for supported locales on my machine (see edit) to find the appropriate German locale identifier.
type object 'datetime.date' has no attribute 'strptime' (neither in 2.7 nor in 3.5). Use datetime.strptime() instead.
3

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 style.

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.