Python OSX和Ubuntu之间俄语包的差异,如何为strftime获得相同的输出?

Python OSX和Ubuntu之间俄语包的差异,如何为strftime获得相同的输出?,python,macos,ubuntu-14.04,Python,Macos,Ubuntu 14.04,我遇到了在python中使用俄语日期的问题 当我使用python 2.7.9在本地OSX virtualenv上运行以下命令时: import locale import datetime locale.setlocale(locale.LC_ALL, 'ru_RU.UTF-8') temp = datetime.date(2015, 8, 11) print temp.strftime("%d %B %Y") import locale import datetime locale.se

我遇到了在python中使用俄语日期的问题

当我使用python 2.7.9在本地OSX virtualenv上运行以下命令时:

import locale
import datetime

locale.setlocale(locale.LC_ALL, 'ru_RU.UTF-8')
temp = datetime.date(2015, 8, 11)
print temp.strftime("%d %B %Y")
import locale
import datetime

locale.setlocale(locale.LC_ALL, 'ru_RU.UTF-8')
temp = datetime.date(2015, 8, 11)
print temp.strftime("%d %B %Y")
输出为:

11 августа 2015
当我使用Python2.7.9在virtualenv中的Ubuntu服务器上运行几乎相同的代码时:

import locale
import datetime

locale.setlocale(locale.LC_ALL, 'ru_RU.UTF-8')
temp = datetime.date(2015, 8, 11)
print temp.strftime("%d %B %Y")
import locale
import datetime

locale.setlocale(locale.LC_ALL, 'ru_RU.UTF-8')
temp = datetime.date(2015, 8, 11)
print temp.strftime("%d %B %Y")
输出是不同的

11 Август 2015
这种差异从何而来?有没有办法强制一种实现优于另一种实现


使用strtime时,由于格式不匹配,因此使用错误的实现时,此差异会导致错误

如果您不能依赖一致的区域设置,您必须保留自己的月份名称词典:

import datetime
months = { ..., 8: 'Август', ... }  # Fill in all 12 with correct names
temp = datetime.date(2015, 8, 11)
print temp.strftime("%d {0} %Y".format(months[temp.month]))

我在OSx和Ubuntu上的strftime也有同样的例子。我用
django.utils.formats
解决它:

import datetime
from django.utils import formats
temp = datetime.date(2015, 8, 11)
print formats.date_format(temp, 'DATE_FORMAT')

有一些默认的日期格式,如“date\u FORMAT”、“SHORT\u DATETIME\u FORMAT”,但您也可以在设置中定义自己的格式。

如果在每段代码中使用相同的区域设置,会发生什么?(当然,我不希望UTF-8和非UTF-8代码之间有不同的月份名称,但您可以通过使用不同的地区来实现这种可能性。)我现在将尝试,但默认情况下,在max osx上使用ru_ru.utf8会出现错误,因此我必须先安装它。然而,我不认为这有什么大的区别,因为这不是编码问题,或者是吗?我已经将两者都更改为ru_ru.UTF-8。这不会更改输出,我也在上面的代码中更改了这一点。不幸的是,我不认为对区域设置的内容有任何标准,只对命名它们时使用的元素有任何标准。(虽然你可以非正式地责怪一个操作系统或另一个操作系统,这取决于两个月的变化中哪一个是“更”正确的;我的俄语几乎不存在,所以我不能说。)差异更可能是由于语言环境版本(可能是通过C库版本),但我不知道如何找出你在OSX上有什么。我预计苹果公司会落后几年,但也许我只是在犹豫不决。谢谢你的建议。如果无法通过区域设置将其修复,我将使用此解决方案。您确定没有办法用区域设置修复它吗?如果区域设置在不同的机器上可能会有所不同,则不会。