Отримайте назву місяця від номера


230

Як я можу отримати назву місяця від номера місяця?

Наприклад, якщо у мене є 3, я хочу повернутисяmarch

date.tm_month()

Як отримати рядок march?

Відповіді:


269

API API

З цього ви бачите, що calendar.month_name[3]повернеться March, а індекс масиву 0- це порожній рядок, тому не потрібно турбуватися і про нульову індексацію.


35
Ви також можете використовувати Calendar.month_abbr [i] для короткої назви місяця - наприклад, березня
Jay Sheth

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

Повернення: грудень

Більше інформації на веб-сайті doc Python


[EDIT: чудовий коментар від @GiriB] Ви також можете використовувати, %bщо повертає коротке позначення назви місяця.

mydate.strftime("%b")

Для наведеного вище прикладу вона повернеться Dec.


7
Це не так корисно, якщо вам потрібно просто знати назву місяця для заданого числа (1 - 12), оскільки поточний день не має значення. тут більш корисні календар.menth_name [i] або Calendar.month_abbr [i].
Джей Шет

11
mydate.strftime("%b")повертає коротке позначення назви місяця. (Для прикладу вище, це повернеться Dec)
GiriB

3
ОП хочуть використовувати ціле число як вхідний, а не об’єкт datetime.datetime. Можна використовувати mydate = datetime.datetime (2019, ціле число, 1, 0, 0), але це досить некрасиво
Rutger Hofste

Я не бачу, як це відповідає на питання.
cglacet


35

Це не так корисно, якщо вам потрібно просто знати назву місяця для заданого числа (1 - 12), оскільки поточний день не має значення.

calendar.month_name[i]

або

calendar.month_abbr[i]

тут корисніші.

Ось приклад:

import calendar

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

Вибірка зразка:

January
Jan

February
Feb

March
Mar

...

Спасибі за вашу відповідь. якщо я можу додати пропозицію, ви можете додати кілька прикладів введення та виводу, щоб показати, як використовувати цей код та різницю між month_nameіmonth_abbr
JMax

Це корисно, я пропоную використовувати range(1, 13)у вашому прикладі, щоб ви отримали всі 12 місяців у результаті.
davejagoda

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

10

Я запропоную це у випадку, якщо (як я) у вас є стовпець номерів місяців у кадрі даних:

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

10

Це те, що я б робив:

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)

Він виводить:

>>> September

(Це була справжня дата, коли я це писав)


3

У деяких хороших відповідях вже використовується календар, але ефект налаштування локалі ще не згадується.

Наприклад, французькою мовою:

import locale
import calendar

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

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

Якщо ви плануєте використовувати setlocaleу своєму коді, ознайомтеся з порадами та застереженнями та розділами написання розширень із документації. Приклад, показаний тут, не є репрезентативним способом його використання. Зокрема, з цих двох розділів:

Зазвичай поганою ідеєю називати setlocale () в деякій бібліотечній процедурі, оскільки як побічний ефект це впливає на всю програму […]

Модулі розширення ніколи не повинні викликати setlocale () […]


1
Добре доповнення, я просто пропоную додати резервну культуру або просто завершити виклик setLocale у спробі / винятком, тому що якщо ця культура недоступна, ви отримуєте виняток (трапилось саме зі мною після спроби цього;))
firepol

Я думаю, що я залишу код таким, як це, тому що встановлення локалі - це, мабуть, не те, що ви робили б поблизу цього коду. Я просто хотів висвітлити, як налаштування локалі також впливає на значення calendar. Можливо, я можу оновити текст.
cglacet

1

Для діапазону арбітарей числа місяців

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

дасть правильний список. Налаштувати параметр, startзвідки починається січень у списку цілих місяців.


0

8.1. datetime - Основні типи дати та часу - Python 2.7.17 документація https://docs.python.org/2/library/datetime.html#strearch-strptime-behavior

Список усіх аргументів строфінгу. Назви місяців та таких приємних речей, як форматування, залиште нульову заливку. Прочитайте повну сторінку для таких матеріалів, як правила для "наївних" аргументів. Ось короткий список:% a Сонце, Пн,…, Сб

% Неділя, понеділок,…, субота

% w Тиждень як число, де 0 - неділя

% d День місяця 01, 02,…, 31

% b січень, лютий,…, груд

% B січень, лютий,…, грудень

% m Кількість місяця у вигляді нульового розміру 01, 02,…, 12

% y 2-значний рік 00, 01,…, 99

% Y Чотиризначний Рік 1970, 1988, 2001, 2013

% H Hour (цілодобовий годинник) 00, 01,…, 23

% I Hour (12-годинний годинник) 01, 02,…, 12

% p AM або PM.

% M Хвилина з нульовим набором 00, 01,…, 59

% S Другий обкладений нулем 00, 01,…, 59

% f Мікросекунда з нульовою підкладкою 000000, 000001,…, 999999

% z зміщення UTC у вигляді + HHMM або -HHMM +0000, -0400, +1030

% Z Назва часового поясу UTC, EST, CST

% j День року 001, 002,…, 366

% U Кількість тижня в році, нульова, 0 днів до першої неділі - тиждень 0

% W число тижня в році (понеділок як перший день)

% c Представлення дати та часу в локальному масштабі. Вт 16 серпня 21:30:00 1988

% x Представлення дати в локальному масштабі. 16.08.1988 (en_US)

% X Показ часу у часі. 21:30:00

%% буквальний символ "%".


-6

Я створив власну функцію перетворення чисел у відповідний місяць.

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"

Тоді я можу викликати функцію. Наприклад:

print (month_name (12))

Виходи:

>>> December

3
Як показано в інших відповідях, ця функціональність вже існує у вбудованому calendarмодулі. Яка користь може створити власну функцію для повторення тих же результатів? Крім того, словник був би набагато швидшим, ніж серія тверджень elif.
Том

4
Крім усіх інших питань, ваша функція працює лише для англійської мови
mick88
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.