强制一个函数的语言环境只能在一个函数中使用英语/英语,以便datetime.strftime始终返回英语格式

时间:2010-11-15 15:43:40

标签: python windows internationalization

我需要编写一个非常简单的python函数,它接受Excel格式的日期(自1900年1月1日以来经过的整数天)。我将其转换为python datetime.date对象,最后我想将其格式化为缩短的字符串日期(例如“Jan10”或“Mar11”) - 基本上是MmmYY格式的日期。

dt.strftime( fmt )

此功能适用于UK&美国的工作站,但是我注意到,在一些设置为法国语言环境的同事PC上,我们得到了错误的错误:

>>> locale.getdefaultlocale()
('fr_FR', 'cp1252')

在这些机器上,上面的函数以法语返回格式化的日期字符串,这不是所需的输出。

我知道我可以使用locale.setlocale函数来全局重新定义语言环境,但这不是理想的。在系统的其他地方,可能存在需要本地语言环境的脚本。我不希望通过重新定义全局语言环境来打破别人的组件。

那我该怎么办?如果没有重写字符串格式化函数,有没有办法让strftime函数在英国/美国语言环境中生成它的输出而不影响其他任何东西?

平台= Windows 32位上的Python2.4.4

仅供参考,此解决方案不适用 - 它会全局更改区域设置,这正是我要避免的做法: Locale date formatting in Python

2 个答案:

答案 0 :(得分:0)

如果您需要固定字符串,那么最好创建月份编号到月份名称的映射,然后使用它。

months = {1: 'Jan', 2: 'Feb', ...}

printf '%s%02d' % (months[somedt.month], somedt.year % 100)

答案 1 :(得分:0)

是的,这是可能的。我在实现Web服务器时遇到了同样的问题。我希望日期/时间显示在客户端Web浏览器的语言环境中,而不是服务器的本地。

在标准库中,有一个语言环境模块。查看setlocale()和getlocale() 方法,特别是LC_TIME类别。您可能希望使用getlocale()来获取现有的语言环境,然后使用setlocale将其设置为“EN_US”或“C”,然后调用strftime方法,最后使用另一个setlocale()调用恢复前一个本地