Obtenir le nom du mois à partir du numéro

230

Comment puis-je obtenir le nom du mois à partir du numéro du mois?

Par exemple, si je l'ai 3, je veux revenirmarch

date.tm_month()

Comment obtenir la chaîne march?

Rajeev
la source

Réponses:

269

API de calendrier

De cela, vous pouvez voir que calendar.month_name[3]cela reviendrait March, et l'index du tableau 0est la chaîne vide, il n'y a donc pas besoin de s'inquiéter de l'indexation zéro.

siame
la source
35
Vous pouvez également utiliser calendar.month_abbr [i] pour un nom de mois court - par exemple mars
Jay Sheth
384
import datetime
mydate = datetime.datetime.now()
mydate.strftime("%B")

Retours: décembre

Quelques informations supplémentaires sur le site Web de la doc Python


[EDIT: excellent commentaire de @GiriB] Vous pouvez également utiliser %bqui renvoie la notation courte pour le nom du mois.

mydate.strftime("%b")

Pour l'exemple ci-dessus, il reviendrait Dec.

JMax
la source
7
Ce n'est pas très utile si vous devez simplement connaître le nom du mois pour un nombre donné (1 - 12), car le jour en cours n'a pas d'importance. calendar.month_name [i] ou calendar.month_abbr [i] sont plus utiles ici.
Jay Sheth
11
mydate.strftime("%b")renvoie une notation courte pour le nom du mois. (Pour l'exemple ci-dessus, il reviendrait Dec)
GiriB
3
L'OP veut utiliser un entier comme entrée, pas un objet datetime.datetime.Vous pouvez utiliser mydate = datetime.datetime (2019, entier, 1, 0, 0) mais c'est plutôt moche
Rutger Hofste
Je ne vois pas comment cela répond à la question.
cglacet
57
import datetime

monthinteger = 4

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

print month

avril

Mike Yantis
la source
35

Ce n'est pas très utile si vous devez simplement connaître le nom du mois pour un nombre donné (1 - 12), car le jour en cours n'a pas d'importance.

calendar.month_name[i]

ou

calendar.month_abbr[i]

sont plus utiles ici.

Voici un exemple:

import calendar

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

Exemple de sortie:

January
Jan

February
Feb

March
Mar

...
Jay Sheth
la source
Merci pour votre réponse. si je peux ajouter une suggestion, vous pouvez ajouter quelques exemples d'entrées et de sorties pour montrer comment utiliser ce code et la différence entre month_nameetmonth_abbr
JMax
C'est utile, je suggère d'utiliser range(1, 13)dans votre exemple pour obtenir les 12 mois de sortie.
davejagoda
21
import datetime
mydate = datetime.datetime.now()
mydate.strftime("%B") # 'December'
mydate.strftime("%b") # 'dec'
ancho
la source
10

Je proposerai ceci au cas où (comme moi) vous avez une colonne de numéros de mois dans une trame de données:

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

Voici ce que je ferais:

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)

Il produit:

>>> September

(C'était la vraie date quand j'ai écrit ça)

The Big Fat Pig
la source
3

Certaines bonnes réponses utilisent déjà le calendrier, mais l'effet de la définition des paramètres régionaux n'a pas encore été mentionné.

Par exemple, en français:

import locale
import calendar

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

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

Si vous prévoyez d'utiliser setlocaledans votre code, assurez-vous de lire les conseils et les mises en garde et les sections du rédacteur d'extension de la documentation. L'exemple présenté ici n'est pas représentatif de la façon dont il doit être utilisé. En particulier, à partir de ces deux sections:

C'est généralement une mauvaise idée d'appeler setlocale () dans une routine de bibliothèque, car comme effet secondaire, cela affecte tout le programme […]

Les modules d'extension ne doivent jamais appeler setlocale () […]

cglacet
la source
1
Bon ajout, je suggère simplement d'ajouter une culture de secours ou d'envelopper simplement l'appel setLocale dans un essai / sauf, car si cette culture n'est pas disponible, vous obtenez une exception (qui m'est arrivée juste après avoir essayé cela;))
Firepol
Je pense que je vais laisser le code tel quel car la définition des paramètres régionaux n'est probablement pas quelque chose que vous feriez de toute façon près de ce code. Je voulais juste souligner l'impact de la définition des paramètres régionaux sur les valeurs de calendar. Je peux peut-être mettre à jour le texte.
cglacet
1

Pour une plage arbitraire de numéros de mois

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

produira une liste correcte. Ajustez le startparamètre à partir du début du mois de janvier dans la liste des mois.

Mehtab Pathan
la source
0

8.1. datetime - Types de date et d'heure de base - Documentation Python 2.7.17 https://docs.python.org/2/library/datetime.html#strftime-strptime-behavior

Une liste de tous les arguments strftime. Les noms des mois et des trucs sympas comme le formatage ne sont pas remplis. Lisez la page complète pour des trucs comme des règles pour les arguments "naïfs". Voici la liste en bref:% a dim, lun,…, sam

% Un dimanche, lundi,…, samedi

% w Jour de la semaine sous forme de nombre, où 0 correspond au dimanche

% d Jour du mois 01, 02,…, 31

% b jan, fév,…, déc

% B janvier, février,…, décembre

% m Numéro de mois sous forme de 01, 02,…, 12

% y à deux chiffres, année zéro, 00, 01,…, 99

% Y 4 chiffres Année 1970, 1988, 2001, 2013

% H Hour (horloge 24 heures) avec remplissage nul 00, 01,…, 23

% I heure (horloge de 12 heures) à remplissage nul 01, 02,…, 12

% p AM ou PM.

% M Minute avec remplissage zéro 00, 01,…, 59

% S Deuxième remplissage zéro 00, 01,…, 59

% f microsecondes, à remplissage nul 000000, 000001,…, 999999

% z Décalage UTC sous la forme + HHMM ou -HHMM +0000, -0400, +1030

% Z Nom du fuseau horaire UTC, EST, CST

% j Jour de l'année à remplissage nul 001, 002,…, 366

% U Numéro de semaine de l'année zéro, les jours avant le premier dimanche sont la semaine 0

% W Numéro de semaine de l'année (lundi comme premier jour)

% c Représentation de la date et de l'heure des paramètres régionaux. Mar 16 août 21:30:00 1988

% x Représentation de la date des paramètres régionaux. 16/08/1988 (en_US)

Représentation temporelle de% X Locale. 21:30:00

Caractère %% littéral '%'.

dhm
la source
-6

J'ai créé ma propre fonction en convertissant les nombres en leur mois correspondant.

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"

Ensuite, je peux appeler la fonction. Par exemple:

print (month_name (12))

Les sorties:

>>> December
jdvcal
la source
3
Comme indiqué dans les autres réponses, cette fonctionnalité existe déjà dans le calendarmodule intégré. Quel avantage peut-il y avoir à créer votre propre fonction pour reproduire les mêmes résultats? En outre, un dictionnaire serait beaucoup plus rapide qu'une série d'instructions elif.
Tom
4
Mis à part tous les autres problèmes, votre fonction ne fonctionne que pour les paramètres régionaux anglais
mick88