Чи існує один ліній, щоб отримати назву місяця, коли ми знаємо int monthNumber = calendar.get(Calendar.MONTH)
? Або який найпростіший спосіб?
Чи існує один ліній, щоб отримати назву місяця, коли ми знаємо int monthNumber = calendar.get(Calendar.MONTH)
? Або який найпростіший спосіб?
Відповіді:
Ви також отримаєте цей шлях.
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;
}
ви можете досягти цього за допомогою SimpleDateFormat , який призначений для форматування дати та часу.
Calendar cal = Calendar.getInstance();
System.out.println(new SimpleDateFormat("MMM").format(cal.getTime()));
Так просто, як це
mCalendar = Calendar.getInstance();
String month = mCalendar.getDisplayName(Calendar.MONTH, Calendar.LONG, Locale.getDefault());
октября
замість цього Октябрь
, чого ви, напевно, очікуєте.
Це рішення, яке я придумав для класового проекту:
public static String theMonth(int month){
String[] monthNames = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
return monthNames[month];
}
Номер, який ви передаєте, походить від Calendar.MONTH
дзвінка.
new SimpleDateFormat("MMMM").format(cal.getTime());
якщо у вас багатомовний інтерфейс, ви можете використовувати getDisplayName для відображення назви місяця з контролем відображення мови.
ось приклад відображення назви місяця англійською, френською, арабською та арабською мовами в певній країні, наприклад "Сирія":
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());
результат:
January
janvier
يناير
كانون الثاني
Sat Jan 17 19:31:30 EET 2015
SimpleDateFormat dateFormat = new SimpleDateFormat( "LLLL", Locale.getDefault() );
dateFormat.format( date );
Для деяких мов (наприклад, російської) це єдиний правильний спосіб отримати самостійні назви місяця.
Це те , що ви отримаєте, якщо ви використовуєте getDisplayName
з Calendar
або DateFormatSymbols
за січень:
января (що правильно для повного рядка дати: " 10 січня 2014 ")
але у випадку окремої назви місяця ви очікуєте:
январь
Як щодо використання Joda-Time . Це набагато кращий API часу для роботи з датою (і January
тут означає січень. Це не так, як Календар, який використовує 0-based
індекс за місяцями).
Ви можете використовувати AbstractDateTime#toString( pattern )
метод для форматування дати у визначеному форматі:
DateTime date = DateTime.now();
String month = date.toString("MMM");
Якщо ви хочете назву місяця для певного номера місяця, ви можете зробити це так:
int month = 3;
String monthName = DateTime.now().withMonthOfYear(month).toString("MMM");
Вищенаведений підхід використовує поточний локальний код вашого JVM для мови назви місяця. Замість цього потрібно вказати об'єкт Locale.
String month = date.toString( "MMM", Locale.CANADA_FRENCH );
SimpleDateFormat
іDate
Month::getDisplayName
Оскільки Java 8, використовуйте Month
enum. getDisplayName
Метод автоматично локалізує назва місяця.
Прохід:
TextStyle
щоб визначити, як довго або як скорочено.Locale
для визначення людської мови, що використовується у перекладі, та культурних норм, що використовуються для абревіатури, пунктуації тощо.Приклад:
public static String getMonthStandaloneName(Month month) {
return month.getDisplayName(
TextStyle.FULL_STANDALONE,
Locale.getDefault()
);
}
Це може бути старе питання, але як один лайнер, щоб отримати назву місяця, коли ми знаємо індекси, я використовував
String month = new DateFormatSymbols().getMonths()[monthNumber - 1];
або для коротких імен
String month = new DateFormatSymbols().getShortMonths()[monthNumber - 1];
Зауважте, що ваш monthNumber
початок рахується з 1, тоді як будь-який із способів, наведених вище, повертає масив, тому потрібно починати рахувати з 0.
Цей код підтримує мову. Я використовував їх у Android App.
String[] mons = new DateFormatSymbols().getShortMonths();//Jan,Feb,Mar,...
String[] months = new DateFormatSymbols().getMonths();//January,Februaty,March,...
Мені це було набагато простіше ( 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));
}
Month
починає свій індекс з січня = 1, тоді як Календар починається з січня = 0? Не Month.of(calendar.get(Calendar.MONTH));
провалився б у випадку січня?
Односторонній:
У нас є Month
API Java ( java.time.Month
). Ми можемо отримати, використовуючиMonth.of(month);
Тут Month
індексуються як числа, тому ви можете вказати Month.JANUARY
або вказати індекс у вищевказаному API, наприклад, 1, 2, 3, 4.
Другий спосіб:
ZonedDateTime.now().getMonth();
Це доступно в java.time.ZonedDateTime
.
Я створив розширення kotlin на основі відповідей у цій темі, використовуючи відповіді DateFormatSymbols, ви отримуєте локалізовану відповідь.
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]
}
Це спрацювало для мене
import java.text.SimpleDateFormat;
import java.util.Calendar;
Calendar cal = Calendar.getInstance();
String currentdate=new SimpleDateFormat("dd-MMM").format(cal.getTime());
DateFormat date = new SimpleDateFormat("dd/MMM/yyyy");
Date date1 = new Date();
System.out.println(date.format(date1));
Він повертає англійську назву місяця. 04 повертає КВІТЕНЬ тощо.
String englishMonth (int month){
return Month.of(month);
}
Month
або застосувати toString
до результату перед його поверненням.
від документа java doc 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>