Cara mendapatkan nama bulan dari Kalender


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;
    }

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()));

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());

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.


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

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:

январь


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

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()
    );
}

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.


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,...

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));
}

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


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

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.


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

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());

0
DateFormat date =  new SimpleDateFormat("dd/MMM/yyyy");
Date date1 = new Date();
System.out.println(date.format(date1));

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);
    }

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>

Saya tidak bisa melihat bagaimana jawaban pertanyaan itu diajukan.
jhpg
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.