Ottieni il nome del mese dal numero


230

Come posso ottenere il nome del mese dal numero del mese?

Ad esempio, se ho 3, voglio tornaremarch

date.tm_month()

Come ottenere la stringa march?

Risposte:


269

API del calendario

Da ciò puoi vedere che calendar.month_name[3]tornerebbe March, e l'indice di array di 0è la stringa vuota, quindi non c'è bisogno di preoccuparsi nemmeno dell'indicizzazione zero.


35
Puoi anche usare calendar.month_abbr [i] per un breve nome di mese - ad es. Mar.
Jay Sheth

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

Ritorni: dicembre

Qualche informazione in più sul sito Web di Python doc


[EDIT: ottimo commento da @GiriB] Puoi anche usare ciò %bche restituisce la breve notazione per il nome del mese.

mydate.strftime("%b")

Per l'esempio sopra, ritornerebbe Dec.


7
Questo non è molto utile se devi solo conoscere il nome del mese per un determinato numero (1 - 12), poiché il giorno corrente non ha importanza. calendar.month_name [i] o calendar.month_abbr [i] sono più utili qui.
Jay Sheth,

11
mydate.strftime("%b")restituisce una breve notazione per il nome del mese. (Per l'esempio sopra, ritornerebbe Dec)
GiriB

3
L'OP vuole usare un numero intero come input, non un oggetto datetime.datetime. Puoi usare mydate = datetime.datetime (2019, numero intero, 1, 0, 0) ma è piuttosto brutto
Rutger Hofste

Non riesco a vedere come questo risponda alla domanda.
Cglacet,

57
import datetime

monthinteger = 4

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

print month

aprile


35

Questo non è molto utile se devi solo conoscere il nome del mese per un determinato numero (1 - 12), poiché il giorno corrente non ha importanza.

calendar.month_name[i]

o

calendar.month_abbr[i]

sono più utili qui.

Ecco un esempio:

import calendar

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

Uscita campione:

January
Jan

February
Feb

March
Mar

...

La ringrazio per la risposta. se potessi aggiungere un suggerimento, potresti aggiungere alcuni esempi di input e output per mostrare come usare questo codice e la differenza tra month_nameemonth_abbr
JMax

Questo è utile, ti suggerisco di usare range(1, 13)nel tuo esempio in modo da ottenere tutti i 12 mesi nell'output.
Davejagoda,

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

10

Offrirò questo nel caso (come me) tu abbia una colonna di numeri di mese in un dataframe:

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

10

Questo è quello che vorrei fare:

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)

Emette:

>>> September

(Questa era la vera data in cui l'ho scritta)


3

Alcune buone risposte fanno già uso del calendario ma l'effetto dell'impostazione della locale non è stato ancora menzionato.

Ad esempio, in francese:

import locale
import calendar

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

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

Se prevedi di utilizzare il setlocaletuo codice, assicurati di leggere i suggerimenti e le avvertenze e le sezioni dell'autore dell'estensione dalla documentazione. L'esempio mostrato qui non è rappresentativo di come dovrebbe essere usato. In particolare, da queste due sezioni:

In genere è una cattiva idea chiamare setlocale () in alcune routine di libreria, poiché come effetto collaterale influenza l'intero programma […]

I moduli di estensione non dovrebbero mai chiamare setlocale () […]


1
Buona aggiunta, solo io suggerisco di aggiungere una cultura di fallback o semplicemente avvolgere la chiamata setLocale in una prova / tranne, perché se quella cultura non è disponibile si ottiene un'eccezione (è successo solo a me dopo aver provato questo;))
firepol

Penso che lascerò il codice così com'è perché l'impostazione della locale probabilmente non è qualcosa che faresti comunque vicino a quel codice. Volevo solo evidenziare in che modo l'impostazione delle impostazioni internazionali influisce anche sui valori calendar. Posso forse aggiornare il testo.
cglacet,

1

Per l'intervallo arbitrario dei numeri dei mesi

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

produrrà l'elenco corretto. Modifica start-parametro da dove inizia gennaio nella lista di numeri interi.


0

8.1. datetime - Tipi di data e ora di base - Documentazione Python 2.7.17 https://docs.python.org/2/library/datetime.html#strftime-strptime-behavior

Un elenco di tutti gli argomenti strftime. Nomi di mesi e cose interessanti come la formattazione lasciano zero riempimento. Leggi la pagina intera per cose come regole per argomenti "ingenui". Ecco la lista in breve:% a dom, lun, ..., sab

% A domenica, lunedì, ..., sabato

% w Weekday come numero, dove 0 è domenica

% d Giorno del mese 01, 02,…, 31

% b gen, feb, ..., dic

% B gennaio, febbraio, ..., dicembre

% m Numero del mese come numero zero 01, 02,…, 12

% y 2 cifre anno con zero zero 00, 01,…, 99

% Y 4 cifre Anno 1970, 1988, 2001, 2013

% H Hour (orologio 24 ore) con zero zero 00, 01,…, 23

% I Hour (orologio a 12 ore) con zero zero 01, 02,…, 12

% p AM o PM.

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

% S Secondo zero-padded 00, 01,…, 59

% f Microsecondo zero-padded 000000, 000001,…, 999999

% z UTC offset nel formato + HHMM o -HHMM +0000, -0400, +1030

% Z Nome fuso orario UTC, EST, CST

% j Giorno dell'anno con zero zero 001, 002,…, 366

% U Numero settimana dell'anno zero arrotondato, I giorni prima della prima domenica sono la settimana 0

% W Numero settimana dell'anno (lunedì come primo giorno)

% c Rappresentazione della data e dell'ora della locale. Mar 16 agosto 21:30:00 1988

% x rappresentazione della data della locale. 16/08/1988 (en_US)

% X Rappresentazione del tempo della locale. 21:30:00

carattere%% letterale '%'.


-6

Ho creato la mia funzione convertendo i numeri nel mese corrispondente.

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"

Quindi posso chiamare la funzione. Per esempio:

print (month_name (12))

Uscite:

>>> December

3
Come mostrato nelle altre risposte, questa funzionalità esiste già nel calendarmodulo integrato. Quale vantaggio potrebbe esserci nel creare la tua funzione per replicare gli stessi risultati? Inoltre, un dizionario sarebbe molto più veloce di una serie di istruzioni elif.
Tom,

4
A parte tutti gli altri problemi, la tua funzione funziona solo per le
impostazioni
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.