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



我遇到了在python中使用俄罗斯日期的问题。

当我使用python 2.7.9在本地OSX虚拟环境上运行以下命令时:

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

当我用python 2.7.9在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")

输出不同

11 Август 2015

这种差异来自哪里,是否有一种方法可以强制一种实现优于另一种实现?

当使用strptime时,由于格式不匹配,当使用错误的实现时,这种差异会导致错误。

我在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_FORMAT', 'SHORT_DATETIME_FORMAT',但你也可以在设置中定义自己的格式。

如果不能使用一致的区域设置,则必须保留自己的月份名称字典:

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]))

最新更新