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(newSimpleDateFormat("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.
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:
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,newLocale("ar")));System.out.println(c.getDisplayName(Calendar.MONTH,Calendar.LONG,newLocale("ar","SY")));System.out.println(c.getTime().toString());
hasilnya adalah:
January
janvier
ينايركانونالثانيSatJan1719:31:30 EET 2015
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).
Perlu diketahui bahwa Anda monthNumbermulai menghitung dari 1 sedangkan salah satu metode di atas mengembalikan larik sehingga Anda perlu mulai menghitung dari 0.
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)]
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 =thisreturn calendar
}
fun Date.getMonthName():String{
val month = toCalendar()[Calendar.MONTH]
val dfs =DateFormatSymbols()
val months = dfs.months
return months[month]}
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.
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,4Jul200112:08:56-0700</code>
Jawaban:
Anda juga akan mendapatkan cara ini.
sumber
Anda dapat mencapainya menggunakan SimpleDateFormat , yang dimaksudkan untuk memformat tanggal dan waktu.
sumber
Sesederhana ini
sumber
октября
alih-alihОктябрь
, yang mungkin Anda harapkan.Ini adalah solusi yang saya buat untuk proyek kelas:
Nomor yang Anda berikan berasal dari
Calendar.MONTH
panggilan.sumber
new SimpleDateFormat("MMMM").format(cal.getTime());
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":
hasilnya adalah:
sumber
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
getDisplayName
dariCalendar
atauDateFormatSymbols
untuk Januari:января (yang benar untuk string tanggal lengkap: " 10 января, 2014 ")
tetapi dalam kasus nama bulan yang berdiri sendiri, Anda akan mengharapkan:
январь
sumber
Waktu Joda
Bagaimana kalau menggunakan Joda-Time . Ini adalah API waktu-tanggal yang jauh lebih baik untuk digunakan (Dan
January
artinya januari di sini. Ini tidak seperti Kalender, yang menggunakan0-based
indeks selama berbulan-bulan).Anda dapat menggunakan
AbstractDateTime#toString( pattern )
metode untuk memformat tanggal dalam format yang ditentukan:Nama Bulan Dari Nomor
Jika Anda menginginkan nama bulan untuk nomor bulan tertentu, Anda dapat melakukannya seperti ini:
Melokalisir
Pendekatan di atas menggunakan Lokal default JVM Anda saat ini untuk bahasa nama bulan. Anda ingin menentukan objek Lokal sebagai gantinya.
sumber
SimpleDateFormat
danDate
Month::getDisplayName
Sejak Java 8, gunakan
Month
enum. ThegetDisplayName
Metode otomatis melokalisasi nama bulan.Lulus:
TextStyle
untuk menentukan seberapa panjang atau seberapa disingkat.Locale
untuk menentukan bahasa manusia yang digunakan dalam terjemahan, dan norma budaya yang digunakan untuk singkatan, tanda baca, dll.Contoh:
sumber
Ini mungkin pertanyaan lama, tapi sebagai satu kalimat untuk mendapatkan nama bulan ketika kita mengetahui indeks, saya menggunakan
atau untuk nama pendek
Perlu diketahui bahwa Anda
monthNumber
mulai menghitung dari 1 sedangkan salah satu metode di atas mengembalikan larik sehingga Anda perlu mulai menghitung dari 0.sumber
Kode ini memiliki dukungan bahasa. Saya telah menggunakannya di Aplikasi Android.
sumber
Saya menemukan ini jauh lebih mudah ( https://docs.oracle.com/javase/tutorial/datetime/iso/enum.html )
sumber
Month
memulai indeksnya dengan Januari = 1, sedangkan Kalender dimulai dengan Januari = 0? Tidak akanMonth.of(calendar.get(Calendar.MONTH));
gagal dalam kasus januari?Anda bisa mendapatkannya satu baris seperti ini:
String monthName = new DataFormatSymbols.getMonths()[cal.get(Calendar.MONTH)]
sumber
Ini bekerja untuk saya:
Untuk kembali
"September"
dengan satu baris:sumber
Satu arah:
Kami memiliki
Month
API di Java (java.time.Month
). Kita bisa mendapatkannya dengan menggunakanMonth.of(month);
Di sini,
Month
indeks diindeks sebagai angka sehingga Anda dapat memberikanMonth.JANUARY
atau memberikan indeks dalam API di atas seperti 1, 2, 3, 4.Cara kedua:
Ini tersedia di
java.time.ZonedDateTime
.sumber
Saya membuat ekstensi kotlin berdasarkan tanggapan dalam topik ini dan menggunakan jawaban DateFormatSymbols Anda mendapatkan tanggapan yang dilokalkan.
sumber
Ini berhasil untuk saya
sumber
sumber
Ini mengembalikan nama bahasa Inggris bulan ini. 04 mengembalikan APRIL dan seterusnya.
sumber
Month
atau menerapkantoString
ke hasil sebelum mengembalikannya.dari dokumen java SimpleDateFormat:
sumber