Получить название месяца из номера


230

Как я могу получить название месяца из номера месяца?

Например, если у меня есть 3, я хочу вернутьmarch

date.tm_month()

Как получить строку march?

Ответы:


269

Календарь API

Из этого видно, что calendar.month_name[3]он вернется March, а индекс массива 0- это пустая строка, поэтому не нужно беспокоиться и об индексации нуля.


35
Вы также можете использовать calendar.month_abbr [i] для короткого названия месяца - например, март
— Джей Шет

383
import datetime
mydate = datetime.datetime.now()
mydate.strftime("%B")

Возвращает: декабрь

Еще немного информации на сайте Python doc


[РЕДАКТИРОВАТЬ: отличный комментарий от @GiriB] Вы также можете использовать, %bкоторый возвращает краткую запись для названия месяца.

mydate.strftime("%b")

Для приведенного выше примера он вернется Dec.


8
Это не очень полезно, если вам нужно просто знать название месяца для данного числа (1 - 12), так как текущий день не имеет значения. calendar.month_name [i] или calendar.month_abbr [i] более полезны здесь.
— Джей Шет

11
mydate.strftime("%b")возвращает короткую запись для названия месяца. (Для приведенного выше примера он вернется Dec)
— GiriB

4
ОП хочет использовать целое число в качестве входных данных, а не объект datetime.datetime. Вы можете использовать mydate = datetime.datetime (2019, integer, 1, 0, 0), но это довольно уродливо
— Рутгер Хофсте

1
Я не вижу, как это отвечает на вопрос.
— cglacet

Что такое% b или% B?
— ШерилХоман


36

Это не очень полезно, если вам нужно просто знать название месяца для данного числа (1 - 12), так как текущий день не имеет значения.

calendar.month_name[i]

или

calendar.month_abbr[i]

более полезны здесь.

Вот пример:

import calendar

for month_idx in range(1, 13):
    print (calendar.month_name[month_idx])
    print (calendar.month_abbr[month_idx])
    print ("")

Образец вывода:

January
Jan

February
Feb

March
Mar

...

Спасибо за ваш ответ. если бы я мог добавить предложение, вы могли бы добавить несколько примеров ввода и вывода, чтобы показать, как использовать этот код и разницу между month_nameиmonth_abbr
— JMax

Это полезно, я предлагаю использовать range(1, 13)в вашем примере, чтобы вы получили все 12 месяцев на выходе.
— davejagoda

Хорошая точка зрения. диапазон (начало, конец) идет от начала, до, но не включая конец. Т.е. использует начало ... конец-1.
— ШерилХоман

20
import datetime
mydate = datetime.datetime.now()
mydate.strftime("%B") # 'December'
mydate.strftime("%b") # 'dec'

10

Я предложу это в случае, если (как и я) у вас есть столбец с числами месяцев в кадре данных:

df['monthName'] = df['monthNumer'].apply(lambda x: calendar.month_name[x])

10

Это то, что я хотел бы сделать:

from datetime import *

months = ["Unknown",
          "January",
          "Febuary",
          "March",
          "April",
          "May",
          "June",
          "July",
          "August",
          "September",
          "October",
          "November",
          "December"]

now = (datetime.now())
year = (now.year)
month = (months[now.month])
print(month)

Это выводит:

>>> September

(Это была настоящая дата, когда я написал это)


3

Некоторые хорошие ответы уже используют календарь, но эффект от настройки локали еще не упоминался.

Например, по-французски:

import locale
import calendar

locale.setlocale(locale.LC_ALL, 'fr_FR')

assert calendar.month_name[1] == 'janvier'
assert calendar.month_abbr[1] == 'jan'

Если вы планируете использовать setlocaleв своем коде, обязательно прочитайте разделы с советами, предостережениями и авторами расширений из документации. Показанный здесь пример не является примером того, как его следует использовать. В частности, из этих двух разделов:

Обычно плохая идея вызывать setlocale () в некоторой библиотечной подпрограмме, поскольку в качестве побочного эффекта это влияет на всю программу […]

Модули расширения никогда не должны вызывать setlocale () […]


1
Хорошее дополнение, просто я предлагаю добавить запасную культуру или просто обернуть вызов setLocale в попытку / исключение, потому что, если эта культура недоступна, вы получите исключение (произошло только со мной после попытки;))
— firepol

Я думаю, что я оставлю код как есть, потому что установка локали, вероятно, не то, что вы бы сделали в любом случае рядом с этим кодом. Я просто хотел подчеркнуть, как установка языкового стандарта также влияет на значения из calendar. Я могу, возможно, обновить текст.
— Cglacet

1

Для произвольного диапазона номеров месяцев

month_integer=range(0,100)
map(lambda x: calendar.month_name[x%12+start],month_integer)

даст правильный список. Настройте start-параметр, с которого начинается январь в списке целых месяцев.


0

8.1. datetime - Основные типы даты и времени - Документация Python 2.7.17 https://docs.python.org/2/library/datetime.html#strftime-strptime-behavior

Список всех аргументов strftime. Названия месяцев и такие приятные вещи, как форматирование, оставляют заполнение нулями. Прочитайте полную страницу для таких вещей, как правила для «наивных» аргументов. Вот краткий список:% Солнце, Пн,…, Сб

% Воскресенье, понедельник, ..., суббота

% w Будний день как число, где 0 - воскресенье

% d День месяца 01, 02,…, 31

% b январь, февраль,…, декабрь

% B январь, февраль,…, декабрь

% m Номер месяца в виде нуля 01, 02,…, 12

% y двузначный год с нулевым заполнением 00, 01,…, 99

% Y 4 цифры Год 1970, 1988, 2001, 2013

% H Hour (24-часовой формат) с нулевым заполнением 00, 01,…, 23

% I час (12-часовые часы) с добавлением нуля 01, 02,…, 12

% p AM или PM.

% M минута с добавлением нуля 00, 01,…, 59

% S Второй, дополненный нулями 00, 01,…, 59

% f Микросекунда с нулевым заполнением 000000, 000001,…, 999999

% z UTC смещение в виде + ЧЧММ или -ЧЧММ +0000, -0400, +1030

% Z Название часового пояса UTC, EST, CST

% j День года с нулями 001, 002,…, 366

% U Номер недели года с добавлением нуля, дни до первого воскресенья - неделя 0

% W Номер недели в году (понедельник как первый день)

% c представление даты и времени локали. Вт 16 августа 21:30:00 1988

% x Представление даты локали. 16.08.1988 (en_US)

% X Местное представление времени. 21:30:00

%% буквальный символ "%".


-6

Я создал свою собственную функцию преобразования чисел в соответствующий месяц.

def month_name (number):
    if number == 1:
        return "January"
    elif number == 2:
        return "February"
    elif number == 3:
        return "March"
    elif number == 4:
        return "April"
    elif number == 5:
        return "May"
    elif number == 6:
        return "June"
    elif number == 7:
        return "July"
    elif number == 8:
        return "August"
    elif number == 9:
        return "September"
    elif number == 10:
        return "October"
    elif number == 11:
        return "November"
    elif number == 12:
        return "December"

Тогда я могу вызвать функцию. Например:

print (month_name (12))

Выходы:

>>> December

3
Как показано в других ответах, эта функциональность уже существует во встроенном calendarмодуле. Какая польза от создания собственной функции для воспроизведения тех же результатов? Кроме того, словарь будет намного быстрее, чем серия операторов elif.
— Том

4
Помимо всех других проблем, ваша функция работает только для английской локали
— mick88
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.