Obtener el nombre del mes del número

230

¿Cómo puedo obtener el nombre del mes del número del mes?

Por ejemplo, si tengo 3, quiero volvermarch

date.tm_month()

¿Cómo conseguir la cuerda march?

Rajeev
fuente

Respuestas:

269

API de calendario

A partir de eso, puede ver que calendar.month_name[3]volvería March, y el índice de matriz de 0es la cadena vacía, por lo que tampoco hay necesidad de preocuparse por la indexación cero.

siame
fuente
35
También puede usar calendar.month_abbr [i] para un nombre de mes corto, por ejemplo, marzo
Jay Sheth
384
import datetime
mydate = datetime.datetime.now()
mydate.strftime("%B")

Devoluciones: diciembre

Más información en el sitio web de Python doc


[EDITAR: gran comentario de @GiriB] También puede usar %bque devuelve la notación corta para el nombre del mes.

mydate.strftime("%b")

Para el ejemplo anterior, volvería Dec.

JMax
fuente
77
Esto no es tan útil si solo necesita saber el nombre del mes para un número dado (1 - 12), ya que el día actual no importa. calendar.month_name [i] o calendar.month_abbr [i] son ​​más útiles aquí.
Jay Sheth
11
mydate.strftime("%b")devuelve una notación corta para el nombre del mes. (Para el ejemplo anterior, volvería Dec)
GiriB
3
El OP quiere usar un entero como entrada, no un objeto datetime.datetime. Puede usar mydate = datetime.datetime (2019, entero, 1, 0, 0) pero es bastante feo
Rutger Hofste
No veo cómo esto responde la pregunta.
cglacet
57
import datetime

monthinteger = 4

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

print month

abril

Mike Yantis
fuente
35

Esto no es tan útil si solo necesita saber el nombre del mes para un número dado (1 - 12), ya que el día actual no importa.

calendar.month_name[i]

o

calendar.month_abbr[i]

son más útiles aquí.

Aquí hay un ejemplo:

import calendar

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

Salida de muestra:

January
Jan

February
Feb

March
Mar

...
Jay Sheth
fuente
Gracias por su respuesta. si pudiera agregar una sugerencia, podría agregar algunos ejemplos de entradas y salidas para mostrar cómo usar este código y la diferencia entre month_nameymonth_abbr
JMax
Esto es útil, sugiero usar range(1, 13)en su ejemplo para que obtenga los 12 meses en la salida.
davejagoda
21
import datetime
mydate = datetime.datetime.now()
mydate.strftime("%B") # 'December'
mydate.strftime("%b") # 'dec'
ancho
fuente
10

Ofreceré esto en caso de que (como yo) tenga una columna de números de mes en un marco de datos:

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

Esto es lo que haría:

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)

Salidas:

>>> September

(Esta fue la fecha real cuando escribí esto)

El gran cerdo gordo
fuente
3

Algunas buenas respuestas ya hacen uso del calendario, pero el efecto de establecer la configuración regional aún no se ha mencionado.

Por ejemplo, en 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'

Si planea usar setlocalesu código, asegúrese de leer los consejos y advertencias y las secciones del escritor de extensiones de la documentación. El ejemplo que se muestra aquí no es representativo de cómo debe usarse. En particular, de estas dos secciones:

En general, es una mala idea llamar a setlocale () en alguna rutina de biblioteca, ya que como efecto secundario afecta a todo el programa [...]

Los módulos de extensión nunca deberían llamar a setlocale () […]

cglacet
fuente
1
Buena adición, solo sugiero agregar una cultura alternativa o simplemente envolver la llamada setLocale en una prueba / excepto, porque si esa cultura no está disponible, obtienes una excepción (me sucedió después de intentar esto;))
firepol
Creo que dejaré el código tal como está porque establecer la configuración regional probablemente no sea algo que harías de todos modos cerca de ese código. Solo quería resaltar cómo la configuración de la configuración regional también afecta los valores calendar. Tal vez pueda actualizar el texto.
cglacet
1

Para el rango arbitaray de números de mes

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

rendirá la lista correcta. Ajuste el startparámetro desde donde comienza enero en la lista de meses enteros.

Mehtab Pathan
fuente
0

8.1. datetime - Tipos básicos de fecha y hora - Documentación de Python 2.7.17 https://docs.python.org/2/library/datetime.html#strftime-strptime-behavior

Una lista de todos los argumentos de strftime. Los nombres de los meses y cosas bonitas como el formato dejaron cero relleno. Lea la página completa para cosas como reglas para argumentos "ingenuos". Aquí está la lista en resumen:% a Sun, Mon, ..., Sat

% A domingo, lunes, ..., sábado

% w Día de la semana como número, donde 0 es domingo

% d Día del mes 01, 02,…, 31

% b ene, feb, ..., dic

% B enero, febrero, ..., diciembre

% m Número de mes como 01, 02,…, 12 con relleno de cero

% y año de 2 dígitos con relleno de cero 00, 01,…, 99

% Y 4 dígitos Año 1970, 1988, 2001, 2013

% H Hora (reloj de 24 horas) con relleno de cero 00, 01,…, 23

% I Hour (reloj de 12 horas) con relleno de cero 01, 02,…, 12

% p AM o PM.

% M Minuto con relleno cero 00, 01,…, 59

% S Segundo relleno con cero 00, 01,…, 59

% f Microsegundo con relleno cero 000000, 000001,…, 999999

% z UTC offset en la forma + HHMM o -HHMM +0000, -0400, +1030

% Z Nombre de zona horaria UTC, EST, CST

% j Día del año con relleno cero 001, 002,…, 366

% U Número de semana del año con relleno cero, los días antes del primer domingo son la semana 0

% W Número de semana del año (lunes como primer día)

% c Representación de fecha y hora de la localidad. Martes 16 de agosto 21:30:00 1988

% x Representación de fecha local. 16/08/1988 (es_ES)

Representación del tiempo de% X Locale. 21:30:00

Carácter literal %% '%'.

dhm
fuente
-6

Creé mi propia función convirtiendo números a su mes correspondiente.

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"

Entonces puedo llamar a la función. Por ejemplo:

print (month_name (12))

Salidas:

>>> December
jdvcal
fuente
3
Como se muestra en las otras respuestas, esta funcionalidad ya existe en el calendarmódulo incorporado . ¿Qué beneficio podría haber al crear su propia función para replicar los mismos resultados? Además, un diccionario sería mucho más rápido que una serie de declaraciones elif.
Tom
44
Además de todos los demás problemas, su función solo funciona para la configuración regional en inglés
mick88