Saya mencoba mengembalikan nama bulan sebagai String, misalnya "Mei", "September", "November".
Saya mencoba:
int month = c.get(Calendar.MONTH);
Namun, ini mengembalikan bilangan bulat (5, 9, 11, masing-masing). Bagaimana saya bisa mendapatkan nama bulan?
java.util.Calendar
dan bukanCalendar
kelas lain , kan?Formatter f = new Formatter();
(opsional Anda dapat memberikannya lokal) laluString monthName = f.format("%tB",c).toString();
atau%tb
untuk nama pendek.Gunakan ini :
Calendar cal=Calendar.getInstance(); SimpleDateFormat month_date = new SimpleDateFormat("MMMM"); String month_name = month_date.format(cal.getTime());
Nama bulan akan berisi nama bulan lengkap ,, jika Anda ingin nama bulan pendek gunakan ini
SimpleDateFormat month_date = new SimpleDateFormat("MMM"); String month_name = month_date.format(cal.getTime());
sumber
Untuk mendapatkan bulan dalam variabel string gunakan kode di bawah ini
Misalnya bulan September:
M -> 9
MM -> 09
MMM -> Sep
MMMM -> September
String monthname=(String)android.text.format.DateFormat.format("MMMM", new Date())
sumber
"MMMM" jelas BUKAN solusi yang tepat (meskipun berfungsi untuk banyak bahasa), gunakan pola "LLLL" dengan
SimpleDateFormat
Dukungan untuk 'L' sebagai ekstensi yang kompatibel dengan ICU untuk nama bulan yang berdiri sendiri telah ditambahkan ke platform Android pada Juni 2010 .
Meskipun dalam bahasa Inggris tidak ada perbedaan antara pengkodean oleh 'MMMM' dan 'LLLL', Anda harus memikirkan bahasa lain juga.
Misalnya, inilah yang Anda dapatkan, jika Anda menggunakan
Calendar.getDisplayName
atau pola "MMMM" untuk bulan Januari dengan bahasa RusiaLocale
:января (yang benar untuk string tanggal lengkap: " 10 января, 2014 ")
tetapi dalam kasus nama bulan yang berdiri sendiri, Anda akan mengharapkan:
январь
Solusi yang tepat adalah:
SimpleDateFormat dateFormat = new SimpleDateFormat( "LLLL", Locale.getDefault() ); dateFormat.format( date );
Jika Anda tertarik dari mana asal semua terjemahan - berikut adalah referensi untuk terjemahan kalender masehi (kalender lain ditautkan di atas halaman).
sumber
Sesederhana ini
mCalendar = Calendar.getInstance(); String month = mCalendar.getDisplayName(Calendar.MONTH, Calendar.LONG, Locale.getDefault());
Calendar.LONG adalah untuk mendapatkan nama lengkap bulan dan Calendar.SHORT memberikan nama singkatnya. Misalnya: Calendar.LONG akan mengembalikan January Calendar.SHORT akan mengembalikan Jan
sumber
Saya menyimpan jawaban ini yang berguna untuk kasus lain, tetapi jawaban @trutheality tampaknya merupakan cara yang paling sederhana dan langsung.
Anda dapat menggunakan DateFormatSymbols
DateFormatSymbols(Locale.FRENCH).getMonths()[month]; // FRENCH as an example
sumber
Satu-satunya cara di Android untuk mendapatkan nama bulan stanalone yang diformat dengan benar untuk bahasa seperti ukraina, rusia, ceko
private String getMonthName(Calendar calendar, boolean short) { int flags = DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_NO_MONTH_DAY | DateUtils.FORMAT_NO_YEAR; if (short) { flags |= DateUtils.FORMAT_ABBREV_MONTH; } return DateUtils.formatDateTime(getContext(), calendar.getTimeInMillis(), flags); }
Diuji pada API 15-25
Output untuk Mei adalah Май tapi tidak Мая
sumber
Rusia.
Month .MAY .getDisplayName( TextStyle.FULL_STANDALONE , new Locale( "ru" , "RU" ) )
Bahasa Inggris di Amerika Serikat.
Month .MAY .getDisplayName( TextStyle.FULL_STANDALONE , Locale.US )
Lihat kode ini ditayangkan langsung di IdeOne.com .
ThreeTenABP dan java.time
Inilah jawaban modernnya. Ketika pertanyaan ini diajukan pada tahun 2011,
Calendar
danGregorianCalendar
biasanya digunakan untuk tanggal dan waktu meskipun desainnya selalu buruk. Itu 8 tahun yang lalu sekarang, dan kelas-kelas itu sudah lama ketinggalan zaman. Dengan asumsi Anda belum menggunakan API level 26, saran saya adalah menggunakan pustaka ThreeTenABP, yang berisi backport java.time yang diadaptasi Android, API tanggal dan waktu Java modern. java.time jauh lebih baik untuk dikerjakan.Bergantung pada kebutuhan dan situasi Anda, ada dua opsi:
Month
dangetDisplayName
metodenya.DateTimeFormatter
.Gunakan Bulan
Locale desiredLanguage = Locale.ENGLISH; Month m = Month.MAY; String monthName = m.getDisplayName(TextStyle.FULL, desiredLanguage); System.out.println(monthName);
Keluaran dari potongan ini adalah:
Dalam beberapa bahasa, akan membuat perbedaan apakah Anda menggunakan
TextStyle.FULL
atauTextStyle.FULL_STANDALONE
. Anda harus melihat, mungkin memeriksa dengan pengguna Anda, mana dari keduanya yang cocok dengan konteks Anda.Gunakan DateTimeFormatter
Jika Anda punya kencan dengan atau tanpa waktu, menurut saya cara yang
DateTimeFormatter
lebih praktis. Sebagai contoh:DateTimeFormatter monthFormatter = DateTimeFormatter.ofPattern("MMMM", desiredLanguage); ZonedDateTime dateTime = ZonedDateTime.of(2019, 5, 31, 23, 49, 51, 0, ZoneId.of("America/Araguaina")); String monthName = dateTime.format(monthFormatter);
Saya menunjukkan penggunaan a
ZonedDateTime
, pengganti terdekat untukCalendar
kelas lama . Kode di atas akan bekerja untukLocalDate
, sebuahLocalDateTime
,MonthDay
,OffsetDateTime
danYearMonth
juga.Bagaimana jika Anda mendapatkan
Calendar
dari API lama yang belum diupgrade ke java.time? Ubah menjadi aZonedDateTime
dan lanjutkan seperti di atas:Calendar c = getCalendarFromLegacyApi(); ZonedDateTime dateTime = DateTimeUtils.toZonedDateTime(c);
Sisanya sama seperti sebelumnya.
Pertanyaan: Bukankah java.time memerlukan Android API level 26?
java.time bekerja dengan baik di perangkat Android lama dan lebih baru. Ini hanya membutuhkan setidaknya Java 6 .
org.threeten.bp
dengan subpaket.Tautan
java.time
pertama kali dijelaskan.java.time
ke Java 6 dan 7 (ThreeTen untuk JSR-310).sumber
Saya akan merekomendasikan untuk menggunakan
Calendar
objek danLocale
karena nama bulan berbeda untuk bahasa yang berbeda:// index can be 0 - 11 private String getMonthName(final int index, final Locale locale, final boolean shortName) { String format = "%tB"; if (shortName) format = "%tb"; Calendar calendar = Calendar.getInstance(locale); calendar.set(Calendar.MONTH, index); calendar.set(Calendar.DAY_OF_MONTH, 1); return String.format(locale, format, calendar); }
Contoh nama bulan penuh:
System.out.println(getMonthName(0, Locale.US, false));
Hasil:
January
Contoh nama bulan pendek:
System.out.println(getMonthName(0, Locale.US, true));
Hasil:
Jan
sumber
Contoh cara untuk mendapatkan tanggal dan waktu dalam format ini "01 Nov 2018 16:18:22" gunakan ini
DateFormat dateFormat = new SimpleDateFormat("yyyy MMM dd HH:mm:ss"); Date date = new Date(); dateFormat.format(date);
sumber
Mendapatkan nama bulan yang berdiri sendiri ternyata sulit dilakukan dengan "benar" di Java. (Setidaknya saat tulisan ini dibuat. Saat ini saya menggunakan Java 8).
Masalahnya adalah bahwa dalam beberapa bahasa, termasuk Rusia dan Ceko, versi nama bulan yang berdiri sendiri berbeda dari versi "pemformatan". Selain itu, tampaknya tidak ada satu Java API yang akan memberi Anda string "terbaik". Mayoritas jawaban yang diposting di sini sejauh ini hanya menawarkan versi format. Disisipkan di bawah ini adalah solusi yang berfungsi untuk mendapatkan versi mandiri dari satu nama bulan, atau mendapatkan array dengan semuanya.
Saya harap ini menghemat waktu orang lain!
/** * getStandaloneMonthName, This returns a standalone month name for the specified month, in the * specified locale. In some languages, including Russian and Czech, the standalone version of * the month name is different from the version of the month name you would use as part of a * full date. (Different from the formatting version). * * This tries to get the standalone version first. If no mapping is found for a standalone * version (Presumably because the supplied language has no standalone version), then this will * return the formatting version of the month name. */ private static String getStandaloneMonthName(Month month, Locale locale, boolean capitalize) { // Attempt to get the standalone version of the month name. String monthName = month.getDisplayName(TextStyle.FULL_STANDALONE, locale); String monthNumber = "" + month.getValue(); // If no mapping was found, then get the formatting version of the month name. if (monthName.equals(monthNumber)) { DateFormatSymbols dateSymbols = DateFormatSymbols.getInstance(locale); monthName = dateSymbols.getMonths()[month.getValue()]; } // If needed, capitalize the month name. if ((capitalize) && (monthName != null) && (monthName.length() > 0)) { monthName = monthName.substring(0, 1).toUpperCase(locale) + monthName.substring(1); } return monthName; } /** * getStandaloneMonthNames, This returns an array with the standalone version of the full month * names. */ private static String[] getStandaloneMonthNames(Locale locale, boolean capitalize) { Month[] monthEnums = Month.values(); ArrayList<String> monthNamesArrayList = new ArrayList<>(); for (Month monthEnum : monthEnums) { monthNamesArrayList.add(getStandaloneMonthName(monthEnum, locale, capitalize)); } // Convert the arraylist to a string array, and return the array. String[] monthNames = monthNamesArrayList.toArray(new String[]{}); return monthNames; }
sumber