Есть ли один указатель, чтобы узнать название месяца, когда мы знаем
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
здесь имеется в виду январь. Это не похоже на Calendar, который использует 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.
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-документа 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>