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.