问题
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")
回答1:
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" )
回答2:
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
来源:https://stackoverflow.com/questions/1299377/handling-international-dates-in-python