it-roy-ru.com

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

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

81
ogzd

Вы тоже получите этот путь.

  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;
    }
83
subodh

вы можете достичь этого, используя SimpleDateFormat, который предназначен для форматирования даты и времени. 

Calendar cal = Calendar.getInstance();
System.out.println(new SimpleDateFormat("MMM").format(cal.getTime()));
160
PermGenError

Так просто, как это

mCalendar = Calendar.getInstance();    
String month = mCalendar.getDisplayName(Calendar.MONTH, Calendar.LONG, Locale.getDefault());
64
sandalone

Это решение, которое я придумал для проекта класса:

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.

40
Terry Chern

если у вас многоязычный интерфейс, вы можете использовать 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
32
Eng. Samer T
SimpleDateFormat dateFormat = new SimpleDateFormat( "LLLL", Locale.getDefault() );
dateFormat.format( date );

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

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

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

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

январь

12
artkoenig

Joda времени

Как насчет использования 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 );
10
Rohit Jain

Month::getDisplayName

Начиная с Java 8, используйте Month enum. Метод getDisplayName автоматически локализует название месяца. 

Проходить:

  • A TextStyle чтобы определить, как долго или как сокращенно.
  • A Locale указать человеческий язык, используемый при переводе, и культурные нормы, используемые для сокращения, пунктуации и т.д.

Пример:

public static String getMonthStandaloneName(Month month) {
    return month.getDisplayName(
        TextStyle.FULL_STANDALONE, 
        Locale.getDefault()
    );
}
8
Nikolay Fedorovskikh

Это может быть старый вопрос, но в качестве единственной строки, чтобы получить название месяца, когда мы знаем индексы, я использовал

String month = new DateFormatSymbols().getMonths()[monthNumber - 1];

или для коротких имен

String month = new DateFormatSymbols().getShortMonths()[monthNumber - 1];

Помните, что ваш monthNumber начинает считать с 1, в то время как любой из вышеперечисленных методов возвращает массив, поэтому вам нужно начать считать с 0.

7
georger

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

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

String[] months = new DateFormatSymbols().getMonths();//January,Februaty,March,...
3
Samet öztoprak

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

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);
2
jhpg

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

2
Whirvis

В одну сторону:

У нас есть Month API в Java (Java.time.Month). Мы можем получить с помощью Month.of(month);

Здесь Month индексируются как числа, так что вы можете предоставить Month.JANUARY или указать индекс в вышеуказанном API, например, 1, 2, 3, 4. 

Второй способ:

ZonedDateTime.now().getMonth();

Это доступно в Java.time.ZonedDateTime.

1
kushal baldev

Я создал расширение 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]
}
0
Felipe Castilhos

Я нашел это намного проще ( https://docs.Oracle.com/javase/tutorial/datetime/iso/enum.html )

private void getCalendarMonth(Date date) {      
    Calendar 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));
}
0
JibinNajeeb
DateFormat date =  new SimpleDateFormat("dd/MMM/yyyy");
Date date1 = new Date();
System.out.println(date.format(date1));
0
Sanjeev Mishra

Возвращает английское название месяца . 04 возвращает АПРЕЛЬ и так далее.

String englishMonth (int month){
        return Month.of(month);
    }
0
mxhc

Это сработало для меня

        import Java.text.SimpleDateFormat;
        import Java.util.Calendar;


        Calendar cal = Calendar.getInstance();
        String currentdate=new SimpleDateFormat("dd-MMM").format(cal.getTime());
0
mahadev gouda