我需要编写一个非常简单的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
答案 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()调用恢复前一个本地