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ò %b
che 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_name
emonth_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 setlocale
tuo 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
calendar
modulo 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.