我有一个datetime对象,我想根据操作系统区域设置创建一个日期字符串(例如在Windows'7区域和语言设置中指定)。
在Python的datetime formatting documentation之后,我使用了%x
格式代码,该代码应该输出“ Locale的相应日期表示。”。我希望这种“表示”可以是Windows“短日期”或“长日期”格式,但它不是任何一种。
(我将短日期格式设置为d/MM/yyyy
,将长日期格式设置为dddd d MMMM yyyy
,但输出为dd/MM/yy
)
这里有什么问题:Python文档,Python实现或我的期望? (以及如何解决?)
答案 0 :(得分:7)
在阅读setlocale() documentation之后,我明白Python没有使用默认的OS语言环境作为默认语言环境。要使用它,我必须启动我的模块:
import locale
locale.setlocale(locale.LC_ALL, '')
或者,如果您只想重置区域设置的时间设置,请仅使用LC_TIME
,因为它可以减少很少的内容:
import locale
locale.setlocale(locale.LC_TIME, '')
肯定会有一个合理的理由,但至少在%x指令的Python文档中可以提到这一点。
答案 1 :(得分:5)
您的语言环境是否在脚本中设置?如果您致电locale.getlocale()
,预计会得到结果吗?比较如下:
>>> import locale
>>> locale.getlocale()
(None, None)
>>> import datetime
>>> today = datetime.date.today()
>>> today
datetime.date(2010, 8, 9)
>>> today.strftime('%x')
'08/09/10'
>>> locale.setlocale(locale.LC_ALL, "de_DE.UTF-8")
'de_DE.UTF-8'
>>> locale.getlocale()
('de_DE', 'UTF8')
>>> today.strftime('%x')
'09.08.2010'
请注意datetime
模块中存在错误,主要是因为底层C库中存在错误。例如,在我的安装(最新的OS X)上,格式化字符串%z
完全不可用。
在Windows上,setlocale()
可用的语言环境字符串的语法遵循与* nix平台不同的语法。列表为here on MSDN。
如果您只是希望将脚本设置为用户安装的任何默认语言环境(在我的英语中),您只需在主脚本的开头执行此操作即可。不要在模块中执行,因为它会覆盖全局变量:
>>> locale.setlocale(locale.LC_ALL, "")
'en_GB.UTF-8'