【问题标题】:Format date based on locale in python根据python中的语言环境格式化日期
【发布时间】:2010-07-19 11:59:32
【问题描述】:

我有一个类似的日期输出

>>> import time
>>> print time.strftime("%d %B")
19 July

有没有办法根据区域设置格式化日期,但仍然可以控制显示的内容(在某些情况下我不想要年份)。

例如,在 en_US 机器上,我希望它输出:

July 19'th

【问题讨论】:

  • 嗯,它要么基于区域设置,要么不是。
  • 所以,你说的是我必须做一个 if/else,在那里检查当前设置的语言环境,并应用适当的格式?
  • 哇。所以你想使用用户的设置但不使用它们? :-) 您可以阅读区域设置,搜索年份并删除该部分。我想那会很痛苦。为什么不只使用一些用户偏好文件来存储日期并让用户指定他们想要的内容?
  • 我知道我的解决方案是错误的,这就是我要求正确解决方案的原因。语言环境的数量限制为最多 3 - 4 个,所以 else if 不是什么大问题,但我希望它具有可扩展性。

标签: python time formatting locale


【解决方案1】:

strftime 方法总是使用当前的语言环境。例如:

from datetime import date
d = date.today()
print d.format("%B %d")

如果您的语言环境是 en_US,则输出“Juillet 19”(没有“'th”,抱歉...),如果语言环境使用法语,则输出“juillet 19”。

如果你想让不同部分的顺序也依赖于语言环境,或者其他更高级的东西,我建议你看看babel 库,它使用来自通用语言环境数据存储库的数据并允许您可以执行以下操作:

from babel.dates import dateformat
format_date(d, format="long", locale="en_US")

这将输出“2010 年 7 月 19 日”,但“19 juillet 2010”表示法语等...请注意,您必须明确请求特定的语言环境(或者更确切地说是语言代码) 唉,这不允许离开这一年。但是,如果您进一步研究 babel,则有一些方法可以获取特定语言环境的模式(例如,babel.dates.get_date_format("long", locale="en_US").pattern 会给您“EEEE,MMMM d,yyyy”,您可以将其用于format 参数而不是“长”)。这仍然让您需要从格式中删除“yyyy”以及逗号等......可能会在之前或之后出现。除此之外,恐怕您必须为每个语言环境制作自己的模式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-24
    • 1970-01-01
    • 2018-09-05
    • 2015-05-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多