Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在一个函数中强制一个函数的区域设置为UK/English,以便datetime.strftime始终返回英语格式_Python_Windows_Internationalization - Fatal编程技术网

Python 在一个函数中强制一个函数的区域设置为UK/English,以便datetime.strftime始终返回英语格式

Python 在一个函数中强制一个函数的区域设置为UK/English,以便datetime.strftime始终返回英语格式,python,windows,internationalization,Python,Windows,Internationalization,我需要编写一个非常简单的python函数,它接受Excel格式的日期(自1900年1月1日以来经过的天数的整数)。我将其转换为python datetime.date对象,最后我想将其格式化为一个缩短的字符串日期(例如“Jan10”或“Mar11”)——基本上是MmmYY格式的日期 dt.strftime( fmt ) 此功能在英国和美国工作站上运行良好,但我注意到,在一些设置为法国地区的同事PC上,我们得到了错误的anser: >>> locale.getdefaultlo

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

dt.strftime( fmt )
此功能在英国和美国工作站上运行良好,但我注意到,在一些设置为法国地区的同事PC上,我们得到了错误的anser:

>>> locale.getdefaultlocale()
('fr_FR', 'cp1252')
在这些机器上,上述函数返回法语格式的日期字符串,该字符串不是所需的输出

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

那我该怎么办?除了重新编写字符串格式函数外,是否有一种方法可以使strftime函数在英国/美国地区生成其输出而不影响其他任何内容

平台=Windows 32位上的Python2.4.4

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

如果您需要固定字符串,那么最好创建月号到月名的映射,并使用它

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

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

如果您需要固定字符串,那么最好创建月号到月名的映射,并使用它

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

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

是的,这是可能的。我在实现web服务器时也遇到过同样的问题。我希望日期/时间显示在客户端web浏览器的区域设置中,而不是服务器的本地区域设置中

在标准库中,有一个区域设置模块。查看setlocale()和getlocale()
方法,特别是LC_时间类别。您可能希望使用getlocale()获取现有的区域设置,然后使用setlocale将其设置为类似“EN_US”或“C”的值,然后调用strftime方法,最后使用另一个setlocale()还原以前的本地设置调用。

是的,这是可能的。我在实现web服务器时也遇到过同样的问题。我希望日期/时间显示在客户端web浏览器的区域设置中,而不是服务器的本地设置中

在标准库中,有一个locale模块 方法,特别是LC_TIME类。您可能希望使用getlocale()获取现有的区域设置,然后使用setlocale将其设置为类似“EN_US”或“C”的值,然后调用strftime方法,最后使用另一个setlocale()调用还原以前的本地设置