代码之家  ›  专栏  ›  技术社区  ›  geejay

在python中处理国际日期

  •  5
  • geejay  · 技术社区  · 15 年前

    我有一个日期,不是用德语格式化的,例如,

    2. Okt. 2009
    

    也可能是

    2. Oct. 2009
    

    如何将其解析为ISO日期时间(或python) datetime )?

    通过使用此代码段解决:

    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")
    
    2 回复  |  直到 15 年前
        1
  •  10
  •   S.Lott    15 年前

    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" )
    
        2
  •  1
  •   Nicolas Lefebvre    15 年前

    关于您的代码片段的一个很小的问题:我不是Python专家,但我会考虑使用整个标志来检查是否成功+悄悄地将所有异常吞咽为糟糕的形式。

    我认为,尝试/期待/否则做你想做的事情要更干净:

    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