Dapatkan nama bulan dari nomor

230

Bagaimana saya bisa mendapatkan nama bulan dari nomor bulan?

Misalnya, jika sudah 3, saya ingin kembalimarch

date.tm_month()

Bagaimana cara mendapatkan string march?

Rajeev
sumber

Jawaban:

269

API Kalender

Dari itu Anda bisa melihat bahwa calendar.month_name[3]akan kembali March, dan indeks array 0adalah string kosong, jadi tidak perlu khawatir tentang pengindeksan nol juga.

siame
sumber
35
Anda juga dapat menggunakan calendar.month_abbr [i] untuk nama bulan pendek - misalnya Mar.
Jay Sheth
384
import datetime
mydate = datetime.datetime.now()
mydate.strftime("%B")

Pengembalian: Desember

Beberapa info lebih lanjut di situs web Python doc


[EDIT: komentar hebat dari @GiriB] Anda juga dapat menggunakan %byang mengembalikan notasi pendek untuk nama bulan.

mydate.strftime("%b")

Untuk contoh di atas, ia akan kembali Dec.

JMax
sumber
7
Ini tidak begitu membantu jika Anda hanya perlu mengetahui nama bulan untuk nomor yang diberikan (1 - 12), karena hari ini tidak masalah. calendar.month_name [i] atau calendar.month_abbr [i] lebih berguna di sini.
Jay Sheth
11
mydate.strftime("%b")mengembalikan notasi singkat untuk nama bulan. (Untuk contoh di atas, ia akan kembali Dec)
GiriB
3
OP ingin menggunakan integer sebagai input, bukan objek datetime.datetime. Anda dapat menggunakan mydate = datetime.datetime (2019, integer, 1, 0, 0) tetapi agak jelek
Rutger Hofste
Saya gagal melihat bagaimana ini menjawab pertanyaan.
cglacet
57
import datetime

monthinteger = 4

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

print month

April

Mike Yantis
sumber
35

Ini tidak begitu membantu jika Anda hanya perlu mengetahui nama bulan untuk nomor yang diberikan (1 - 12), karena hari ini tidak masalah.

calendar.month_name[i]

atau

calendar.month_abbr[i]

lebih berguna di sini.

Berikut ini sebuah contoh:

import calendar

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

Output sampel:

January
Jan

February
Feb

March
Mar

...
Jay Sheth
sumber
Terima kasih atas jawaban Anda. jika saya dapat menambahkan saran, Anda dapat menambahkan beberapa contoh input dan output untuk menunjukkan cara menggunakan kode ini dan perbedaan antara month_namedanmonth_abbr
JMax
Ini membantu, saya sarankan menggunakan range(1, 13)dalam contoh Anda sehingga Anda mendapatkan semua 12 bulan di output.
davejagoda
21
import datetime
mydate = datetime.datetime.now()
mydate.strftime("%B") # 'December'
mydate.strftime("%b") # 'dec'
ancho
sumber
10

Saya akan menawarkan ini jika (seperti saya) Anda memiliki kolom angka bulan dalam kerangka data:

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

Inilah yang akan saya lakukan:

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)

Ini Keluaran:

>>> September

(Ini Adalah Tanggal Sebenarnya Ketika Saya Menulis Ini)

Babi Besar yang Gemuk
sumber
3

Beberapa jawaban yang baik sudah menggunakan kalender tetapi efek pengaturan lokal belum disebutkan.

Misalnya, dalam bahasa Prancis:

import locale
import calendar

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

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

Jika Anda berencana untuk menggunakan setlocalekode Anda, pastikan untuk membaca tip dan peringatan dan bagian penulis ekstensi dari dokumentasi. Contoh yang ditunjukkan di sini tidak mewakili bagaimana seharusnya digunakan. Secara khusus, dari dua bagian ini:

Biasanya merupakan ide yang buruk untuk memanggil setlocale () dalam beberapa rutin perpustakaan, karena sebagai efek samping itu mempengaruhi seluruh program [...]

Modul ekstensi tidak boleh memanggil setlocale () [...]

cglacet
sumber
1
Tambahan yang bagus, saya hanya menyarankan untuk menambahkan budaya fallback atau hanya membungkus panggilan setLocale di coba / kecuali, karena jika budaya itu tidak tersedia Anda mendapatkan pengecualian (terjadi hanya pada saya setelah mencoba ini;))
firepol
Saya pikir saya akan meninggalkan kode apa adanya karena pengaturan lokal mungkin bukan sesuatu yang akan Anda lakukan di dekat kode itu. Saya hanya ingin menyoroti bagaimana pengaturan lokal juga memengaruhi nilai dari calendar. Saya mungkin dapat memperbarui teks.
cglacet
1

Untuk rentang angka bulan arbitaray

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

akan menghasilkan daftar yang benar. Sesuaikan startparameter dari mulai Januari di daftar bilangan bulat bulan.

Mehtab Pathan
sumber
0

8.1. datetime - Tipe tanggal dan waktu dasar - Dokumentasi Python 2.7.17 https://docs.python.org/2/library/datetime.html#strftime-strptime-behavior

Daftar semua argumen strftime. Nama berbulan-bulan dan hal-hal bagus seperti pemformatan tidak mengisi. Baca halaman lengkap untuk hal-hal seperti aturan untuk argumen "naif". Berikut ini daftar singkatnya:% a Matahari, Sen, ..., Sabtu

% A Minggu, Senin, ..., Sabtu

% w Hari kerja sebagai angka, di mana 0 adalah hari Minggu

% d Hari dalam bulan 01, 02,…, 31

% b Jan, Feb,…, Des

% B Januari, Februari, ..., Desember

% m Angka bulan sebagai nol, 01, 02,…, 12

% y 2 digit tahun nol-empuk 00, 01,…, 99

% Y 4 digit Tahun 1970, 1988, 2001, 2013

% H Jam (24 jam) nol-empuk 00, 01,…, 23

% I Jam (12 jam) nol-empuk 01, 02,…, 12

% p AM atau PM.

% M Menit nol-empuk 00, 01,…, 59

% S Kedua nol-empuk 00, 01, ..., 59

% f Microsecond nol-empuk 000000, 000001,…, 999999

% z UTC offset dalam bentuk + HHMM atau -HHMM +0000, -0400, +1030

% Z Nama zona waktu UTC, EST, CST

% j Hari dalam setahun nol-empuk 001, 002,…, 366

% Nomor minggu U tahun tanpa nol, Hari sebelum hari Minggu pertama adalah minggu 0

% W Jumlah minggu dalam setahun (Senin sebagai hari pertama)

% c Representasi tanggal dan waktu lokal. Selasa 16 Agustus 21:30:00 1988

% x Representasi tanggal lokal. 08/16/1988 (en_US)

Representasi waktu% X Lokal. 21:30:00

%% literal '%' karakter.

dhm
sumber
-6

Saya membuat fungsi saya sendiri mengonversi angka ke bulan yang sesuai.

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"

Maka saya bisa memanggil fungsi. Sebagai contoh:

print (month_name (12))

Keluaran:

>>> December
jdvcal
sumber
3
Seperti yang ditunjukkan dalam jawaban lain, fungsi ini sudah ada dalam calendarmodul bawaan. Apa manfaatnya menciptakan fungsi Anda sendiri untuk mereplikasi hasil yang sama? Juga, kamus akan jauh lebih cepat daripada serangkaian pernyataan elif.
Tom
4
Terlepas dari semua masalah lain, fungsi Anda hanya berfungsi untuk lokal bahasa Inggris
mick88