Risposte:
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.
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.
mydate.strftime("%b")restituisce una breve notazione per il nome del mese. (Per l'esempio sopra, ritornerebbe Dec)
import datetime
monthinteger = 4
month = datetime.date(1900, monthinteger, 1).strftime('%B')
print month
aprile
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
...
month_nameemonth_abbr
range(1, 13)nel tuo esempio in modo da ottenere tutti i 12 mesi nell'output.
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])
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)
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 () […]
calendar. Posso forse aggiornare il testo.
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.
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 '%'.
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
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.