根据区域设置格式化Python中的日期

1 投票
1 回答
2172 浏览
提问于 2025-04-16 01:30

我有一个日期输出,像这样:

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

有没有办法根据地区格式化这个日期,同时还能控制显示的内容(有时候我不想显示年份)。

比如,在一个使用美国英语的机器上,我希望它输出:

July 19'th

1 个回答

2

strftime方法总是使用当前的地区设置。举个例子:

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

如果你的地区设置是en_US(美国英语),它会输出“July 19”(没有“th”,抱歉...),但如果地区设置是法语,它会输出“juillet 19”。

如果你想让不同部分的顺序也依赖于地区设置,或者想做一些更高级的事情,我建议你看看babel这个库。它使用来自公共地区数据仓库的数据,允许你做一些这样的事情:

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

这会输出“July 19, 2010”,但如果是法语则会输出“19 juillet 2010”,等等... 注意,你必须明确请求一个特定的地区设置(或者说语言代码)。

可惜的是,这个方法不支持省略年份。不过,如果你深入了解babel,还是有办法获取特定地区的日期格式(比如babel.dates.get_date_format("long", locale="en_US").pattern会给你“EEEE, MMMM d, yyyy”这样的格式,你可以用它来替代“long”作为format参数)。不过,这样你还得自己去掉格式中的“yyyy”,还有可能出现在前后面的逗号等等... 除此之外,恐怕你得为每个地区设置自己定义格式。

撰写回答