Obter nome do mês a partir do número


230

Como posso obter o nome do mês a partir do número do mês?

Por exemplo, se eu tiver 3, quero retornarmarch

date.tm_month()

Como obter a string march?

Respostas:


269

API do Google Agenda

A partir disso, você pode ver que calendar.month_name[3]retornaria March, e o índice da matriz 0é a string vazia, portanto não há necessidade de se preocupar com a indexação zero.


35
Você também pode usar calendar.month_abbr [i] para um nome curto de mês - por exemplo, março
Jay Sheth 6/16

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

Retorna: dezembro

Mais algumas informações no site de documentos do Python


[EDIT: ótimo comentário de @GiriB] Você também pode usar o %bque retorna a notação curta para o nome do mês.

mydate.strftime("%b")

Para o exemplo acima, ele retornaria Dec.


7
Isso não é tão útil se você precisar apenas saber o nome do mês para um determinado número (1 a 12), pois o dia atual não importa. calendar.month_name [i] ou calendar.month_abbr [i] são mais úteis aqui.
Jay Sheth

11
mydate.strftime("%b")retorna notação curta para o nome do mês. (Para o exemplo acima, retornaria Dec)
GiriB

3
O OP quer usar um inteiro como entrada, não uma datetime.datetime object.You pode usar mydate = datetime.datetime (2019, inteiro, 1, 0, 0), mas é um pouco feio
Rutger Hofste

Não vejo como isso responde à pergunta.
cglacet

57
import datetime

monthinteger = 4

month = datetime.date(1900, monthinteger, 1).strftime('%B')

print month

abril


35

Isso não é tão útil se você precisar apenas saber o nome do mês para um determinado número (1 a 12), pois o dia atual não importa.

calendar.month_name[i]

ou

calendar.month_abbr[i]

são mais úteis aqui.

Aqui está um exemplo:

import calendar

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

Saída de amostra:

January
Jan

February
Feb

March
Mar

...

Obrigado pela sua resposta. se eu poderia acrescentar uma sugestão, você pode adicionar alguns exemplos de entrada e saídas para mostrar como usar este código e a diferença entre month_nameemonth_abbr
JMax

Isso é útil, sugiro usar range(1, 13)no seu exemplo para obter todos os 12 meses na saída.
Davidjagoda

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

10

Oferecerei isso caso (como eu) você tenha uma coluna de números de mês em um dataframe:

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

10

Isto é o que eu faria:

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)

Saídas:

>>> September

(Esta foi a data real em que escrevi isso)


3

Algumas boas respostas já fazem uso do calendário, mas o efeito de definir o código do idioma ainda não foi mencionado.

Por exemplo, em francês:

import locale
import calendar

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

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

Se você planeja usar setlocaleseu código, leia as seções de dicas e advertências e do escritor de extensão da documentação. O exemplo mostrado aqui não é representativo de como deve ser usado. Em particular, nessas duas seções:

Geralmente, é uma má idéia chamar setlocale () em alguma rotina da biblioteca, pois como efeito colateral isso afeta todo o programa […]

Os módulos de extensão nunca devem chamar setlocale () […]


1
Boa disso, apenas sugiro para adicionar uma cultura de fallback ou simplesmente embrulhar a chamada setLocale em um try / exceto, porque se que a cultura não está disponível, você receberá uma exceção (aconteceu apenas para me depois de tentar isso;))
firepol

Acho que vou deixar o código como está, pois definir o código do idioma provavelmente não é algo que você faria de qualquer maneira perto desse código. Eu só queria destacar como a configuração do código do idioma também afeta os valores calendar. Talvez eu possa atualizar o texto.
cglacet 10/06

1

Para números de intervalo de meses arbitaray

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

produzirá a lista correta. Ajuste start-parâmetro de onde janeiro começa na lista inteiro do mês.


0

8.1 datetime - Tipos básicos de data e hora - documentação do Python 2.7.17 https://docs.python.org/2/library/datetime.html#strftime-strptime-behavior

Uma lista de todos os argumentos do strftime. Nomes de meses e coisas legais como formatação deixaram zero de preenchimento. Leia a página inteira para coisas como regras para argumentos "ingênuos". Aqui está a lista resumida:% a Dom, Seg,…, Sáb

% A domingo, segunda-feira,…, sábado

% w Dia da semana como número, onde 0 é domingo

% d Dia do mês 01, 02,…, 31

% b Jan, fev,…, dez

% B janeiro, fevereiro,…, dezembro

% m Número do mês como 01, 02,…, 12 preenchido com zero

% y ano de 2 dígitos preenchido com zero 00, 01,…, 99

% Y 4 dígitos Ano 1970, 1988, 2001, 2013

% H Hora (relógio de 24 horas) preenchido com zero 00, 01,…, 23

% I hora (relógio de 12 horas) preenchido com zero 01, 02,…, 12

% p AM ou PM.

% M Minuto preenchido com zero 00, 01,…, 59

% S Segundo preenchido com zero 00, 01,…, 59

% f Microssegundo preenchido com zero 000000, 000001,…, 999999

Deslocamento% z UTC no formato + HHMM ou -HHMM +0000, -0400, +1030

% Z Nome do fuso horário UTC, EST, CST

% j Dia do ano preenchido com zero 001, 002,…, 366

% U Número da semana do ano preenchido com zero, dias antes do primeiro domingo são a semana 0

% W Número da semana do ano (segunda-feira como primeiro dia)

% c Representação de data e hora da localidade. Ter 16 de agosto 21:30:00 1988

% x representação da data da localidade. 16/08/1988 (pt_BR)

Representação de tempo do local X%. 21:30:00

Caractere %% literal '%'.


-6

Criei minha própria função convertendo números para o mês correspondente.

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"

Então eu posso chamar a função Por exemplo:

print (month_name (12))

Saídas:

>>> December

3
Como mostrado nas outras respostas, essa funcionalidade já existe no calendarmódulo interno. Qual é o benefício de criar sua própria função para replicar os mesmos resultados? Além disso, um dicionário seria muito mais rápido que uma série de declarações elif.
Tom

4
Além de todas as outras questões, a sua função só funciona para a localidade Inglês
mick88
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.