Handling international dates in python

我只是一个虾纸丫 提交于 2019-12-22 07:12:03

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!