Holen Sie sich den Monatsnamen von der Nummer


230

Wie kann ich den Monatsnamen aus der Monatsnummer ermitteln?

Wenn ich zum Beispiel habe 3, möchte ich zurückkehrenmarch

date.tm_month()

Wie bekomme ich den String march?

Antworten:


269

Kalender-API

Daraus können Sie ersehen, dass calendar.month_name[3]dies zurückkehren würde March, und der Array-Index von 0ist die leere Zeichenfolge, sodass Sie sich auch keine Gedanken über die Nullindizierung machen müssen.


35
Sie können calendar.month_abbr [i] auch für einen kurzen Monatsnamen verwenden - z. B. Mar.
Jay Sheth

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

Rückgabe: Dezember

Weitere Informationen finden Sie auf der Python-Doc-Website


[EDIT: großartiger Kommentar von @GiriB] Sie können auch %bdie Kurznotation für den Monatsnamen verwenden.

mydate.strftime("%b")

Für das obige Beispiel würde es zurückkehren Dec.


7
Dies ist nicht so hilfreich, wenn Sie nur den Monatsnamen für eine bestimmte Nummer (1 - 12) kennen müssen, da der aktuelle Tag keine Rolle spielt. Kalender.monat_name [i] oder Kalender.month_abbr [i] sind hier nützlicher.
Jay Sheth

11
mydate.strftime("%b")Gibt die Kurznotation für den Monatsnamen zurück. (Für das obige Beispiel würde es zurückkehren Dec)
GiriB

3
Das OP möchte eine Ganzzahl als Eingabe verwenden, kein datetime.datetime-Objekt. Sie können mydate = datetime.datetime (2019, Ganzzahl, 1, 0, 0) verwenden, aber es ist ziemlich hässlich
Rutger Hofste

Ich sehe nicht, wie dies die Frage beantwortet.
cglacet

57
import datetime

monthinteger = 4

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

print month

April


35

Dies ist nicht so hilfreich, wenn Sie nur den Monatsnamen für eine bestimmte Nummer (1 - 12) kennen müssen, da der aktuelle Tag keine Rolle spielt.

calendar.month_name[i]

oder

calendar.month_abbr[i]

sind hier nützlicher.

Hier ist ein Beispiel:

import calendar

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

Beispielausgabe:

January
Jan

February
Feb

March
Mar

...

Vielen Dank für Ihre Antwort. Wenn ich einen Vorschlag hinzufügen könnte, könnten Sie einige Beispiele für Ein- und Ausgaben hinzufügen, um zu zeigen, wie dieser Code und der Unterschied zwischen month_nameundmonth_abbr
JMax

Dies ist hilfreich. Ich schlage vor, range(1, 13)in Ihrem Beispiel zu verwenden, damit Sie alle 12 Monate in der Ausgabe erhalten.
Davejagoda

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

10

Ich biete dies an, falls Sie (wie ich) eine Spalte mit Monatszahlen in einem Datenrahmen haben:

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

10

Das würde ich tun:

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)

Es gibt aus:

>>> September

(Dies war das wahre Datum, als ich das schrieb)


3

Einige gute Antworten verwenden bereits den Kalender, aber den Effekt des Festlegens des Gebietsschemas wurde noch nicht erwähnt.

Zum Beispiel auf Französisch:

import locale
import calendar

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

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

Wenn Sie setlocalein Ihrem Code verwenden möchten, lesen Sie unbedingt die Tipps und Vorbehalte sowie die Abschnitte zum Erweiterungsschreiber aus der Dokumentation. Das hier gezeigte Beispiel ist nicht repräsentativ für die Verwendung. Insbesondere aus diesen beiden Abschnitten:

Es ist im Allgemeinen eine schlechte Idee, setlocale () in einer Bibliotheksroutine aufzurufen, da dies als Nebeneffekt das gesamte Programm betrifft […]

Erweiterungsmodule sollten niemals setlocale () aufrufen […]


1
Gute Ergänzung, nur ich schlage vor, eine Fallback-Kultur hinzuzufügen oder den setLocale-Aufruf einfach in einen try / exception zu packen, denn wenn diese Kultur nicht verfügbar ist, erhalten Sie eine Ausnahme (ist mir nur passiert, nachdem ich dies versucht habe;))
firepol

Ich denke, ich werde den Code unverändert lassen, da das Festlegen des Gebietsschemas wahrscheinlich nicht in der Nähe dieses Codes erfolgt. Ich wollte nur hervorheben, wie sich das Festlegen des Gebietsschemas auch auf die Werte von auswirkt calendar. Ich kann den Text vielleicht aktualisieren.
cglacet

1

Für den Arbitaray-Bereich von Monatszahlen

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

wird korrekte Liste ergeben. Passen Sie den startParameter an, ab dem der Januar in der Monats-Ganzzahlliste beginnt.


0

8.1. Datum / Uhrzeit - Grundlegende Datums- und Uhrzeittypen - Python 2.7.17-Dokumentation https://docs.python.org/2/library/datetime.html#strftime-strptime-behavior

Eine Liste aller strftime-Argumente. Namen von Monaten und nette Dinge wie das Formatieren ließen keine Füllung. Lesen Sie die ganze Seite für Dinge wie Regeln für "naive" Argumente. Hier ist die Liste in Kürze:% a So, Mo,…, Sa.

% Ein Sonntag, Montag,…, Samstag

% w Wochentag als Zahl, wobei 0 Sonntag ist

% d Tag des Monats 01, 02,…, 31

% b Jan, Feb,…, Dez.

% B Januar, Februar,…, Dezember

% m Monatszahl als nullgefüllte 01, 02,…, 12

% y 2-stelliges Jahr mit Nullen aufgefüllt 00, 01,…, 99

% Y 4-stelliges Jahr 1970, 1988, 2001, 2013

% H Stunde (24-Stunden-Uhr) mit Nullen aufgefüllt 00, 01,…, 23

% I Stunde (12-Stunden-Uhr) nullgefüllt 01, 02,…, 12

% p AM oder PM.

% M Minute null gepolstert 00, 01,…, 59

% S Zweite Null-gepolsterte 00, 01,…, 59

% f Mikrosekunden null aufgefüllt 000000, 000001,…, 999999

% z UTC-Offset in der Form + HHMM oder -HHMM +0000, -0400, +1030

% Z Zeitzonenname UTC, EST, CST

% j Tag des Jahres mit Nullen aufgefüllt 001, 002,…, 366

% U Wochennummer des Jahres Null gepolstert, Tage vor dem ersten Sonntag sind Woche 0

% W Wochennummer des Jahres (Montag als erster Tag)

% c Darstellung von Datum und Uhrzeit des Gebietsschemas. Di 16. August 21:30:00 1988

% x Datumsangabe des Gebietsschemas. 16.08.1988 (en_US)

% X Zeitdarstellung des Gebietsschemas. 21:30:00

%% Literal '%' Zeichen.


-6

Ich habe meine eigene Funktion erstellt, um Zahlen in den entsprechenden Monat umzuwandeln.

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"

Dann kann ich die Funktion aufrufen. Beispielsweise:

print (month_name (12))

Ausgänge:

>>> December

3
Wie in den anderen Antworten gezeigt, ist diese Funktionalität bereits im integrierten calendarModul vorhanden. Welchen Vorteil könnte es haben, eine eigene Funktion zu erstellen, um dieselben Ergebnisse zu replizieren? Außerdem wäre ein Wörterbuch viel schneller als eine Reihe von elif-Anweisungen.
Tom

4
Abgesehen von allen anderen Problemen funktioniert Ihre Funktion nur für das englische Gebietsschema
mick88
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.