Python的日历:日/在特定区域月份名称(Python calendar: day/month n

2019-07-02 10:47发布

我与Python的打日历这是标准库模块。 基本上,我需要一个月的所有天的列表,就像这样:

>>> 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'

因此, Oktoberde_DE名字十月。 精细。 这些信息必须在那里。 我想知道如果我能以某种方式访问一个普通的在该月的名称calendar对象,而不是一个calendar.LocaleTextCalendar对象。 第一个例子(与列表)真的是我需要什么,我不喜欢这个主意,以创建两个日历对象以获得本地化名称。

任何人有一个聪明的主意?

Answer 1:

这是从源代码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)

TimeEncodingmonth_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上下文打印“火星”,这是对挪威“进行曲”。

对于平日有使用类似的方法day_nameday_abbr http://stardict.sourceforge.net/Dictionaries.php下载:

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


Answer 2:

哈! 发现了一个简单的方法来获得本地化的日/月名称:

>>> import locale
>>> locale.setlocale(locale.LC_ALL, 'de_DE')
'de_DE'
>>> import calendar
>>> calendar.month_name[10]
'Oktober'
>>> calendar.day_name[1]
'Dienstag'


Answer 3:

这里的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])


文章来源: Python calendar: day/month names in specific locale