Uzyskaj nazwę miesiąca z numeru

230

Jak mogę uzyskać nazwę miesiąca z numeru miesiąca?

Na przykład, jeśli mam 3, chcę wrócićmarch

date.tm_month()

Jak zdobyć ciąg march?

Rajeev
źródło

Odpowiedzi:

269

API kalendarza

Z tego widać, że calendar.month_name[3]to zwróci March, a indeks tablicy 0jest pustym ciągiem, więc nie trzeba się też martwić indeksowaniem zerowym.

siame
źródło
35
Możesz także użyć calendar.month_abbr [i] dla nazwy krótkiego miesiąca - np. Mar.
Jay Sheth
384
import datetime
mydate = datetime.datetime.now()
mydate.strftime("%B")

Zwraca: grudzień

Więcej informacji na stronie doc Python


[EDYCJA: świetny komentarz @GiriB] Możesz również użyć, %bktóra zwraca krótką notację dla nazwy miesiąca.

mydate.strftime("%b")

W powyższym przykładzie powróci Dec.

JMax
źródło
7
Nie jest to tak pomocne, jeśli potrzebujesz znać nazwę miesiąca dla danej liczby (1–12), ponieważ bieżący dzień nie ma znaczenia. kalendarza.month_name [i] lub calendar.month_abbr [i] są tutaj bardziej przydatne.
Jay Sheth,
11
mydate.strftime("%b")zwraca krótką notację dla nazwy miesiąca. (W powyższym przykładzie powróci Dec)
GiriB
3
OP chce użyć liczby całkowitej jako danych wejściowych, a nie obiektu datetime.datetime. Możesz użyć mydate = datetime.datetime (2019, liczba całkowita, 1, 0, 0), ale jest raczej brzydka
Rutger Hofste
Nie widzę, jak to odpowiada na pytanie.
cglacet
57
import datetime

monthinteger = 4

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

print month

kwiecień

Mike Yantis
źródło
35

Nie jest to tak pomocne, jeśli potrzebujesz znać nazwę miesiąca dla danej liczby (1–12), ponieważ bieżący dzień nie ma znaczenia.

calendar.month_name[i]

lub

calendar.month_abbr[i]

są bardziej przydatne tutaj.

Oto przykład:

import calendar

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

Przykładowe dane wyjściowe:

January
Jan

February
Feb

March
Mar

...
Jay Sheth
źródło
Dziękuję za Twoją odpowiedź. jeśli dodam sugestię, można dodać kilka przykładów wejścia i wyjścia, aby pokazać jak wykorzystać ten kod, a różnica między month_nameimonth_abbr
jMax
Jest to pomocne, sugeruję użycie range(1, 13)w twoim przykładzie, aby uzyskać wszystkie 12 miesięcy w wyniku.
davejagoda,
21
import datetime
mydate = datetime.datetime.now()
mydate.strftime("%B") # 'December'
mydate.strftime("%b") # 'dec'
ancho
źródło
10

Oferuję to w przypadku, gdy (tak jak ja) masz kolumnę liczb miesięcy w ramce danych:

df['monthName'] = df['monthNumer'].apply(lambda x: calendar.month_name[x])
Brett Rudder
źródło
10

Oto co bym zrobił:

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)

Wyprowadza:

>>> September

(To była prawdziwa data, kiedy to napisałem)

The Big Fat Pig
źródło
3

Niektóre dobre odpowiedzi już korzystają z kalendarza, ale efekt ustawiania lokalizacji nie został jeszcze wspomniany.

Na przykład w języku francuskim:

import locale
import calendar

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

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

Jeśli planujesz używać setlocalew swoim kodzie, zapoznaj się z poradami, zastrzeżeniami i sekcjami programu piszącego rozszerzenia z dokumentacji. Przedstawiony tutaj przykład nie jest reprezentatywny dla tego, jak należy go używać. W szczególności z tych dwóch sekcji:

Generalnie złym pomysłem jest wywoływanie setlocale () w niektórych procedurach bibliotecznych, ponieważ jako efekt uboczny wpływa na cały program […]

Moduły rozszerzeń nigdy nie powinny wywoływać setlocale () […]

cglacet
źródło
1
Dobry dodatek, po prostu proponuję dodać rezerwową kulturę lub po prostu zawinąć wywołanie setLocale w try / else, ponieważ jeśli ta kultura nie jest dostępna, otrzymujesz wyjątek (zdarzyło mi się to po próbie;))
firepol
Myślę, że zostawię ten kod bez zmian, ponieważ ustawianie ustawień regionalnych prawdopodobnie nie jest czymś, co zrobiłbyś w pobliżu tego kodu. Chciałem tylko podkreślić, jak ustawienie regionalne wpływa również na wartości calendar. Mogę zaktualizować tekst.
cglacet
1

Dla arbitaray zakres numerów miesięcy

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

da poprawną listę. Dostosuj startparametr, od którego zaczyna się styczeń na liście liczb całkowitych miesiąca.

Mehtab Pathan
źródło
0

8.1 datetime - Podstawowe typy daty i godziny - Dokumentacja Python 2.7.17 https://docs.python.org/2/library/datetime.html#strftime-strptime-behavior

Lista wszystkich argumentów strftime. Nazwy miesięcy i fajne rzeczy, takie jak formatowanie, pozostawiły zero zero. Przeczytaj całą stronę, na przykład takie zasady, jak „naiwne” argumenty. Oto lista w skrócie:% niedz., Pon.,…, Sob

% A niedziela, poniedziałek,…, sobota

% w Dzień tygodnia jako liczba, gdzie 0 to niedziela

% d Dzień miesiąca 01, 02,…, 31

% b sty, luty,…, gru

% B styczeń, luty,…, grudzień

% m Numer miesiąca jako uzupełniony zerami 01, 02,…, 12

% y 2-cyfrowy rok wypełniony zerami 00, 01,…, 99

% Y 4 cyfry Rok 1970, 1988, 2001, 2013

% H Godzina (zegar 24-godzinny) wyściełany zerami 00, 01,…, 23

% I Godzina (zegar 12-godzinny) wyściełany zerami 01, 02,…, 12

% p AM lub PM.

% M Minuta wypełniona zerami 00, 01,…, 59

% S Drugi, uzupełniony zerami 00, 01,…, 59

% f Mikrosekundowe wypełnienie zerowe 000000, 000001,…, 999999

Przesunięcie% z UTC w postaci + HHMM lub -HHMM +0000, -0400, +1030

% Z Nazwa strefy czasowej UTC, EST, CST

% j Dzień roku wypełniony zerami 001, 002,…, 366

% U Numer tygodnia wypełnionego zera roku, Dni przed pierwszą niedzielą to tydzień 0

% W Numer tygodnia w roku (poniedziałek jako pierwszy dzień)

% c Przedstawienie daty i godziny ustawień regionalnych. Wt 16 sierpnia 21:30:00 1988

Reprezentacja daty% x ustawienia regionalne. 08/16/1988 (en_US)

Reprezentacja czasowa% X ustawień regionalnych. 21:30:00

%% dosłowny znak „%”.

dhm
źródło
-6

Stworzyłem własną funkcję konwertującą liczby na odpowiadający im miesiąc.

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"

Następnie mogę wywołać funkcję. Na przykład:

print (month_name (12))

Wyjścia:

>>> December
jdvcal
źródło
3
Jak pokazano w innych odpowiedziach, ta funkcjonalność już istnieje we wbudowanym calendarmodule. Jaka może być korzyść z utworzenia własnej funkcji w celu odtworzenia tych samych wyników? Ponadto słownik byłby znacznie szybszy niż seria instrukcji elif.
Tom
4
Oprócz wszystkich innych problemów, twoja funkcja działa tylko dla angielskich ustawień regionalnych
mick88