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?

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.


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.


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


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

...

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'

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])

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)


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 () [...]


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.


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.


-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

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.