Как получить название месяца из календаря


есть ли oneliner, чтобы получить имя месяца, когда мы знаем int monthNumber = calendar.get(Calendar.MONTH) ? Или какой самый простой способ?

15 77

15 ответов:

вы также получите этот путь.

  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 звонок.

Если у вас есть многоязычный интерфейс, вы можете использовать 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

Joda Времени

как насчет использования Joda Времени. Это гораздо лучший API даты и времени для работы (и January здесь означает январь. Это не похоже на календарь, который использует в течение месяца).

можно использовать 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 dateFormat = new SimpleDateFormat( "LLLL", Locale.getDefault() );
dateFormat.format( date );

для некоторых языков (например, русского) это единственный правильный способ получить автономный названий месяцев.

это то, что вы получаете, Если вы используете getDisplayName С Calendar или DateFormatSymbols за январь:

января (что верно для полной строки даты:"10 января,")

но в случае автономного названия месяца вы ожидаете:

январь

Начиная С Java 8:

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.

вы можете получить его одну строку, как это: String monthName = new DataFormatSymbols.getMonths()[cal.get(Calendar.MONTH)]

это работает для меня:

String getMonthName(int monthNumber) {
    String[] months = new DateFormatSymbols().getMonths();
    int n = monthNumber-1;
    return (n >= 0 && n <= 11) ? months[n] : "wrong number";
}

возвращает "September" одна строка:

String month = getMonthName(9);

этот код имеет поддержку языка. Я использовал их в Android-приложении.

String[] mons = new DateFormatSymbols().getShortMonths();//Jan,Feb,Mar,... 

String[] months = new DateFormatSymbols().getMonths();//January,Februaty,March,...
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);
    }

из документа SimpleDateFormat java:

*         <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>