【问题标题】:parse date string with only locale as parameter in python解析日期字符串,只有语言环境作为python中的参数
【发布时间】:2021-07-04 06:52:39
【问题描述】:

我正在尝试解析日期字符串。

我只有一个字符串和一个语言环境代码,如“en_EN”或“de_DE”。字符串和语言环境是任意的,因此硬编码格式不是解决方案。

通常这没有问题。我会使用 locale.nl_langinfo() 来获取格式。但是,它在 Windows 上不存在。

由于我不想每次想要支持语言环境时都更新字符串格式字典,是否有一个库可以为我提供语言环境的日期格式字符串,或者只是根据语言环境代码进行解析?

我发现的每个库都需要日期格式字符串。 请帮忙:)

编辑:在这一点上,我只需要一个语言环境和相应日期格式的字典

【问题讨论】:

  • @chemicalwill 我不会生成日期。我正在解析可能是“13.1.2020”或“1.13.2020”的字符串,格式的唯一指示是参数“en_US”或“en_EN”。
  • 你的意思是:它在 Windows 上不起作用。?有什么错误吗?符合docs此功能并非在所有系统上都可用,并且可能的选项集也可能因平台而异
  • @MauriceMeyer 确切地说,该功能在 Windows 上不存在。这就是为什么我正在寻找替代方案。为了清楚起见,我编辑了我的问题。
  • 这能回答你的问题吗? How to detect the OS default language in python?
  • 不是真的,我拥有的是日期字符串和相应的语言环境字符串。我使用 nl_langinfo() 的方式是首先将语言环境设置为语言环境字符串,然后调用 nl_langinfo(locale.D_FMT) 来获取日期格式。我正在寻找一种将例如“de_DE”转换为“%d.%m.%Y”的方法,即日期格式。

标签: python date parsing locale


【解决方案1】:

可以使用 ctypes 读取 Windows 语言环境,如 post 中所述。
此外,您需要显式设置语言环境以获取语言环境的默认日期格式:

import locale
import datetime as dt

today = dt.date.today()
for loc in ('de_DE', 'ja_JP', 'en_US'):
    locale.setlocale(locale.LC_TIME,f'{loc}.UTF-8')
    date_format = locale.nl_langinfo(locale.D_FMT)
    print(f"{loc} >> {today.strftime(date_format)}")

输出:

de_DE >> 09.04.2021
ja_JP >> 2021/04/09
en_US >> 04/09/2021

【讨论】:

  • 感谢您的建议,但正如我所说,windows 上不存在 locale.nl_langinfo()。由于代码要在linux上运行,我就写代码,希望没有错误,因为我无法在windows上调试。
猜你喜欢
  • 2015-01-21
  • 2014-03-15
  • 2012-04-14
  • 1970-01-01
  • 1970-01-01
  • 2021-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多