我正在使用标准库中的Python calendar模块。基本上我需要一个月的所有日子的列表,如下:
>>> import calendar
>>> calobject = calendar.monthcalendar(2012, 10)
>>> print calobject
[[1, 2, 3, 4, 5, 6, 7], [8, 9, 10, 11, 12, 13, 14], [15, 16, 17, 18, 19, 20, 21], [22, 23, 24, 25, 26, 27, 28], [29, 30, 31, 0, 0, 0, 0]]
现在我还需要的是特定区域设置中月份和日期的名称。我没有找到从calobject
本身获取这些内容的方法 - 但我能够像这样得到它们:
>>> import calendar
>>> calobject = calendar.LocaleTextCalendar(calendar.MONDAY, 'de_DE')
>>> calobject.formatmonth(2012, 10)
' Oktober 2012\nMo Di Mi Do Fr Sa So\n 1 2 3 4 5 6 7\n 8 9 10 11 12 13 14\n15 16 17 18 19 20 21\n22 23 24 25 26 27 28\n29 30 31\n'
所以Oktober
是十月的de_DE
名称。精细。信息必须在那里。我想知道我是否可以在普通calendar
对象而不是calendar.LocaleTextCalendar
对象上以某种方式访问该月份名称。第一个例子(带有列表)实际上是我需要的,我不喜欢创建两个日历对象来获取本地化名称的想法。
任何人都有一个聪明的想法?
答案 0 :(得分:27)
哈!找到了获取本地化日/月名称的简便方法:
>>> import locale
>>> locale.setlocale(locale.LC_ALL, 'de_DE')
'de_DE'
>>> import calendar
>>> calendar.month_name[10]
'Oktober'
>>> calendar.day_name[1]
'Dienstag'
答案 1 :(得分:20)
这来自calendar
模块的源代码:
def formatmonthname(self, theyear, themonth, width, withyear=True):
with TimeEncoding(self.locale) as encoding:
s = month_name[themonth]
if encoding is not None:
s = s.decode(encoding)
if withyear:
s = "%s %r" % (s, theyear)
return s.center(width)
可以从TimeEncoding
模块导入 month_name
和calendar
。这给出了以下方法:
from calendar import TimeEncoding, month_name
def get_month_name(month_no, locale):
with TimeEncoding(locale) as encoding:
s = month_name[month_no]
if encoding is not None:
s = s.decode(encoding)
return s
print get_month_name(3, "nb_NO.UTF-8")
对我来说,不需要解码步骤,只需在month_name[3]
上下文中打印TimeEncoding
打印“mars”,这是“march”的挪威语。
对于工作日,使用day_name
和day_abbr
dicts的方法类似:
from calendar import TimeEncoding, day_name, day_abbr
def get_day_name(day_no, locale, short=False):
with TimeEncoding(locale) as encoding:
if short:
s = day_abbr[day_no]
else:
s = day_name[day_no]
if encoding is not None:
s = s.decode(encoding)
return s
答案 2 :(得分:0)
这是Lauritz为Python 3更新答案的月份部分:
from calendar import month_name, different_locale
def get_month_name(month_no, locale):
with different_locale(locale):
return month_name[month_no])