Cara mendapatkan nama bulan dari Kalender

96

Apakah ada satu cara untuk mendapatkan nama bulan yang kita tahu int monthNumber = calendar.get(Calendar.MONTH)? Atau apakah cara termudah?

ogzd
sumber
3
@anyone_reaching_this_issue: Pertanyaan ini ( stackoverflow.com/questions/6192781/month-name-as-a-string ) menyebutkan getDisplayName () dan trik intesreting lainnya
Poutrathor

Jawaban:

99

Anda juga akan mendapatkan cara ini.

  String getMonthForInt(int num) {
        String month = "wrong";
        DateFormatSymbols dfs = new DateFormatSymbols();
        String[] months = dfs.getMonths();
        if (num >= 0 && num <= 11 ) {
            month = months[num];
        }
        return month;
    }
subodh
sumber
6
Implementasi DateFormatSymbols diubah di JDK 8, jadi metode getMonths tidak mengembalikan nilai yang benar untuk semua Lokal lagi: oracle.com/technetwork/java/javase/…
ahaaman
1
dapatkah Anda memberikan solusi solusi / kerja untuk JDK8?
Dominik
kapan Anda akan mendapatkan bulan sebagai angka?
Mickey Perlstein
Mickey untuk menjawab pertanyaan Anda, berikut adalah bagaimana Anda mendapatkan bulan sebagai int dan menggunakannya - public static void main (String [] args) {int month; Tanggal GregorianCalendar = new GregorianCalendar (); bulan = tanggal.get (Calendar.MONTH); System.out.println ("Bulan saat ini adalah" + (bulan + 1) + "dan nama Bulan adalah" + getMonthForInt (bulan)); } String statis getMonthForInt (int num) {String bulan = "salah"; DateFormatSymbols dfs = DateFormatSymbols baru (); String [] bulan = dfs.getMonths (); if (num> = 0 && num <= 11) {month = months [num]; } bulan kembali; }
Ajay Kumar
193

Anda dapat mencapainya menggunakan SimpleDateFormat , yang dimaksudkan untuk memformat tanggal dan waktu.

Calendar cal = Calendar.getInstance();
System.out.println(new SimpleDateFormat("MMM").format(cal.getTime()));
PermGenError
sumber
Ini akan berhasil tetapi saya ingin mendapatkan string repr. bulan ketika saya tahu indeksnya. Saya pikir saya akan menggunakan pendekatan lain, terima kasih.
ogzd
47
ini membantu saya mendapatkan nama bulan saat ini. meskipun saya menggunakan ("MMMM") untuk mendapatkan nama bulan penuh, bukan yang dipersingkat.
speedynomads
77

Sesederhana ini

mCalendar = Calendar.getInstance();    
String month = mCalendar.getDisplayName(Calendar.MONTH, Calendar.LONG, Locale.getDefault());
sandalone
sumber
4
Penggunaan abstraksi Kalender adalah solusi paling elegan menurut saya. +1
sebastian
2
Salah! Masalahnya ada pada bahasa dengan kasus. Misalnya, di lokal Slavia itu akan mengembalikan bulan dalam kasus genitif, misalnya, untuk Oktober di lokal ru-RU Anda akan menerima октябряalih-alih Октябрь, yang mungkin Anda harapkan.
Nick Sikrier
41

Ini adalah solusi yang saya buat untuk proyek kelas:

public static String theMonth(int month){
    String[] monthNames = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
    return monthNames[month];
}

Nomor yang Anda berikan berasal dari Calendar.MONTHpanggilan.

Terry Chern
sumber
2
Ini berguna bagi sayanew SimpleDateFormat("MMMM").format(cal.getTime());
Pratik Butani
ini adalah solusi yang lemah, bagaimana dengan jan, feb dll. bukan tambahan pada januari februari dll. ini tidak akan mencakup semua situasi
Abeer zaroor
2
Nah, Anda harus menambahkan 1 ke bulan. Array mulai dari 0.
RoccoDev
ini buruk, Anda menciptakan kembali java?
Mickey Perlstein
1
Ini berfungsi untuk pengguna berbahasa Inggris. Bagaimana dengan yang lainnya?
Advait S
33

jika Anda memiliki antarmuka multi-bahasa, Anda dapat menggunakan getDisplayName untuk menampilkan nama bulan dengan kontrol bahasa tampilan.

berikut adalah contoh menampilkan nama bulan dalam bahasa inggris, frensh, arab dan arab di negara tertentu seperti "Syria":

    Calendar c = Calendar.getInstance();
    System.out.println(c.getDisplayName(Calendar.MONTH, Calendar.LONG, Locale.ENGLISH ) );
    System.out.println(c.getDisplayName(Calendar.MONTH, Calendar.LONG, Locale.FRANCE ) );
    System.out.println(c.getDisplayName(Calendar.MONTH, Calendar.LONG, new Locale("ar") ) );
    System.out.println(c.getDisplayName(Calendar.MONTH, Calendar.LONG, new Locale("ar", "SY") ) );
    System.out.println(c.getTime().toString());

hasilnya adalah:

  January
  janvier
  يناير
  كانون الثاني
  Sat Jan 17 19:31:30 EET 2015
Eng. Samer T
sumber
Versi java apa ini?
Muhammad Gelbana
16
SimpleDateFormat dateFormat = new SimpleDateFormat( "LLLL", Locale.getDefault() );
dateFormat.format( date );

Untuk beberapa bahasa (misalnya Rusia), ini adalah satu-satunya cara yang benar untuk mendapatkan nama bulan yang berdiri sendiri.

Inilah yang Anda dapatkan, jika Anda gunakan getDisplayNamedari Calendaratau DateFormatSymbolsuntuk Januari:

января (yang benar untuk string tanggal lengkap: " 10 января, 2014 ")

tetapi dalam kasus nama bulan yang berdiri sendiri, Anda akan mengharapkan:

январь

artkoenig.dll
sumber
Adalah jawaban yang benar untuk lokal RU. Aneh sekali, SDK android tidak mengandung spesifikasi 'LLLL'.
Anfet
12

Waktu Joda

Bagaimana kalau menggunakan Joda-Time . Ini adalah API waktu-tanggal yang jauh lebih baik untuk digunakan (Dan Januaryartinya januari di sini. Ini tidak seperti Kalender, yang menggunakan 0-basedindeks selama berbulan-bulan).

Anda dapat menggunakan AbstractDateTime#toString( pattern )metode untuk memformat tanggal dalam format yang ditentukan:

DateTime date = DateTime.now();
String month = date.toString("MMM");

Nama Bulan Dari Nomor

Jika Anda menginginkan nama bulan untuk nomor bulan tertentu, Anda dapat melakukannya seperti ini:

int month = 3;
String monthName = DateTime.now().withMonthOfYear(month).toString("MMM");

Melokalisir

Pendekatan di atas menggunakan Lokal default JVM Anda saat ini untuk bahasa nama bulan. Anda ingin menentukan objek Lokal sebagai gantinya.

String month = date.toString( "MMM", Locale.CANADA_FRENCH );
Rohit Jain
sumber
1
terima kasih tapi saya senang dengan lama saya SimpleDateFormatdanDate
ogzd
@gambarunik Harapanmu. Tetapi Anda harus mencobanya, dan saya yakin Anda akan senang menyanyikannya.
Rohit Jain
@gambarunik Saya memposting cara mendapatkan nama bulan dari nomor bulan. BTW, mengapa Anda ingin melakukan itu?
Rohit Jain
10

Month::getDisplayName

Sejak Java 8, gunakan Monthenum. The getDisplayNameMetode otomatis melokalisasi nama bulan.

Lulus:

  • A TextStyleuntuk menentukan seberapa panjang atau seberapa disingkat.
  • A Localeuntuk menentukan bahasa manusia yang digunakan dalam terjemahan, dan norma budaya yang digunakan untuk singkatan, tanda baca, dll.

Contoh:

public static String getMonthStandaloneName(Month month) {
    return month.getDisplayName(
        TextStyle.FULL_STANDALONE, 
        Locale.getDefault()
    );
}
Nikolay Fedorovskikh
sumber
9

Ini mungkin pertanyaan lama, tapi sebagai satu kalimat untuk mendapatkan nama bulan ketika kita mengetahui indeks, saya menggunakan

String month = new DateFormatSymbols().getMonths()[monthNumber - 1];

atau untuk nama pendek

String month = new DateFormatSymbols().getShortMonths()[monthNumber - 1];

Perlu diketahui bahwa Anda monthNumbermulai menghitung dari 1 sedangkan salah satu metode di atas mengembalikan larik sehingga Anda perlu mulai menghitung dari 0.

georger
sumber
3

Kode ini memiliki dukungan bahasa. Saya telah menggunakannya di Aplikasi Android.

String[] mons = new DateFormatSymbols().getShortMonths();//Jan,Feb,Mar,... 

String[] months = new DateFormatSymbols().getMonths();//January,Februaty,March,...
Samet ÖZTOPRAK
sumber
1
Ini bekerja dengan sempurna, namun komentarnya sedikit salah
Иво Недев
3

Saya menemukan ini jauh lebih mudah ( https://docs.oracle.com/javase/tutorial/datetime/iso/enum.html )

private void getCalendarMonth(Date date) {      
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(date);
    Month month = Month.of(calendar.get(Calendar.MONTH));       
    Locale locale = Locale.getDefault();
    System.out.println(month.getDisplayName(TextStyle.FULL, locale));
    System.out.println(month.getDisplayName(TextStyle.NARROW, locale));
    System.out.println(month.getDisplayName(TextStyle.SHORT, locale));
}
JibinNajeeb
sumber
tidak Monthmemulai indeksnya dengan Januari = 1, sedangkan Kalender dimulai dengan Januari = 0? Tidak akan Month.of(calendar.get(Calendar.MONTH));gagal dalam kasus januari?
MCO
2

Anda bisa mendapatkannya satu baris seperti ini: String monthName = new DataFormatSymbols.getMonths()[cal.get(Calendar.MONTH)]

Whirvis
sumber
2

Ini bekerja untuk saya:

String getMonthName(int monthNumber) {
    String[] months = new DateFormatSymbols().getMonths();
    int n = monthNumber-1;
    return (n >= 0 && n <= 11) ? months[n] : "wrong number";
}

Untuk kembali "September"dengan satu baris:

String month = getMonthName(9);
jhpg
sumber
2

Satu arah:

Kami memiliki MonthAPI di Java ( java.time.Month). Kita bisa mendapatkannya dengan menggunakanMonth.of(month);

Di sini, Monthindeks diindeks sebagai angka sehingga Anda dapat memberikan Month.JANUARYatau memberikan indeks dalam API di atas seperti 1, 2, 3, 4.

Cara kedua:

ZonedDateTime.now().getMonth();

Ini tersedia di java.time.ZonedDateTime.

kushal Baldev
sumber
1

Saya membuat ekstensi kotlin berdasarkan tanggapan dalam topik ini dan menggunakan jawaban DateFormatSymbols Anda mendapatkan tanggapan yang dilokalkan.

fun Date.toCalendar(): Calendar {
    val calendar = Calendar.getInstance()
    calendar.time = this
    return calendar
}


fun Date.getMonthName(): String {
    val month = toCalendar()[Calendar.MONTH]
    val dfs = DateFormatSymbols()
    val months = dfs.months
    return months[month]
}
Felipe Castilhos
sumber
1

Ini berhasil untuk saya

        import java.text.SimpleDateFormat;
        import java.util.Calendar;


        Calendar cal = Calendar.getInstance();
        String currentdate=new SimpleDateFormat("dd-MMM").format(cal.getTime());
mahadev gouda
sumber
0
DateFormat date =  new SimpleDateFormat("dd/MMM/yyyy");
Date date1 = new Date();
System.out.println(date.format(date1));
Amit Mishra
sumber
1
Meskipun jawaban Anda mungkin benar, kualitasnya buruk. Harap jelaskan mengapa jawaban ini benar.
SubliemeSiem
1
@SubliemeSiem Saya hanya mencoba untuk mengubah format dan cara termudah untuk menyelesaikannya: MM- itu akan mengembalikan nama bulan dalam integer seperti 01, 02, 03. MMM-itu akan mengembalikan nama bulan singkatnya seperti jan, feb, mar. MMMM-itu akan mengembalikan nama bulan penuh dalam format string seperti Januari.
Amit Mishra
ini adalah satu-satunya jawaban yang BENAR untuk memformat tanggal. menggunakan objek Tanggal atau Kalender dan memformatnya dengan pemformat. pertanyaannya sendiri BURUK
Mickey Perlstein
0

Ini mengembalikan nama bahasa Inggris bulan ini. 04 mengembalikan APRIL dan seterusnya.

String englishMonth (int month){
        return Month.of(month);
    }
mxhc
sumber
Saran sederhana dan langsung, terima kasih. Kode Anda tidak dapat dikompilasi. Anda harus mendeklarasikan jenis pengembalian Monthatau menerapkan toStringke hasil sebelum mengembalikannya.
Ole VV
-3

dari dokumen java SimpleDateFormat:

*         <td><code>"yyyyy.MMMMM.dd GGG hh:mm aaa"</code>
 *         <td><code>02001.July.04 AD 12:08 PM</code>
 *         <td><code>"EEE, d MMM yyyy HH:mm:ss Z"</code>
 *         <td><code>Wed, 4 Jul 2001 12:08:56 -0700</code>
Rafael Sanches
sumber
Saya tidak bisa melihat bagaimana jawaban pertanyaan itu diajukan.
jhpg