【问题标题】:Handling international dates in python在 python 中处理国际日期
【发布时间】:2010-11-20 22:13:51
【问题描述】:

我有一个日期是德语,例如,

2. Okt. 2009

也可能是

2. Oct. 2009

如何将其转换为 ISO 日期时间(或 Python datetime)?

用这个sn-p解决了:

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

然后在setlocale中为参数l插入适当的。

可以解析使用

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

【问题讨论】:

    标签: python datetime internationalization locale


    【解决方案1】:

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

    datetime 模块已经支持区域设置。

    是这样的

    # 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")
            
    

    【讨论】:

    • 谢谢。我必须在我的机器上搜索支持的语言环境(见编辑)才能找到合适的德语语言环境标识符。
    • type object 'datetime.date' has no attribute 'strptime'(在 2.7 和 3.5 中都没有)。请改用datetime.strptime()
    【解决方案2】:

    关于您的代码 sn-p 的小问题:我不是 Python 专家,但我认为整个“检查成功的标志 + 默默地吞下所有异常”是不好的风格。

    try/expect/else 以更简洁的方式做你想做的事,我认为:

    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
    

    【讨论】:

      猜你喜欢
      • 2013-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-23
      相关资源
      最近更新 更多