캘린더에서 월 이름을 얻는 방법


답변:


99

이 방법으로도 얻을 수 있습니다.

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

6
DateFormatSymbols 구현이 JDK 8에서 변경되었으므로 getMonths 메소드가 더 이상 모든 로케일에 대해 올바른 값을 리턴하지 않습니다. oracle.com/technetwork/java/javase/…
ahaaman 2014

1
JDK8에 대한 해결 방법 / 작업 솔루션을 제공 할 수 있습니까?
Dominik 2014 년

한 달을 숫자로 언제 얻을 수 있습니까?
Mickey Perlstein

질문에 대답하는 미키, 다음은 월을 int로 가져 와서 사용하는 방법입니다.-public static void main (String [] args) {int month; GregorianCalendar 날짜 = 새로운 GregorianCalendar (); 월 = date.get (Calendar.MONTH); System.out.println ( "현재 월은"+ (월 + 1) + "이고 월 이름은"+ getMonthForInt (month)); } static String getMonthForInt (int num) {String month = "잘못된"; DateFormatSymbols dfs = new DateFormatSymbols (); String [] months = dfs.getMonths (); if (num> = 0 && num <= 11) {month = months [num]; } 반환 월; }
Ajay Kumar

192

날짜 및 시간 형식을 지정하는 SimpleDateFormat 을 사용하여이를 달성 할 수 있습니다 .

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

이것은 작동하지만 문자열 repr을 얻고 싶습니다. 내가 그것의 색인을 알고있는 달의. 다른 접근법을 사용할 것 같습니다. 감사합니다.
ogzd 2013

47
이것은 내가 이번 달 이름을 얻는 데 도움이되었습니다. ( "MMMM")을 사용하여 축약 된 월 이름 대신 전체 월 이름을 얻었습니다.
speedynomads 2013.06.02

77

이렇게 간단합니다

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

4
캘린더 추상화의 사용은 제 생각에 가장 우아한 솔루션입니다. +1
sebastian 2015

2
잘못된! 문제는 케이스가있는 언어에 있습니다. 예를 들어, 슬라브어 로케일이 RU-RU 년 10 월, 예를 들어, 소유격에 달 돌아갑니다 당신이받을 로케일 октября대신에 Октябрь당신은 아마 기대한다.
Nick Sikrier 2017

41

이것이 내가 수업 프로젝트를 위해 생각해 낸 해결책입니다.

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전화 에서 나옵니다 .


2
이것은 나를 위해 유용하다new SimpleDateFormat("MMMM").format(cal.getTime());
Pratik Butani

이 등 1월 2 월 1 월 2 월 등을하지뿐만 아니라 대한이 모든 상황을 커버하지 방법, 약한 솔루션입니다
아 비어 zaroor

2
글쎄, 당신은 달에 1을 더해야합니다. 어레이는 0부터 시작합니다.
RoccoDev

이것은 나쁘다, 당신은 자바를 다시 발명하고 있습니까?
Mickey Perlstein

1
이것은 영어 사용자를 위해 작동합니다. 다른 사람들은 어떻습니까?
Advait S

33

다국어 인터페이스가있는 경우 getDisplayName을 사용하여 표시 언어 제어와 함께 월 이름을 표시 할 수 있습니다.

다음은 "시리아"와 같은 특정 국가에서 월 이름을 영어, frensh, 아랍어 및 아랍어로 표시하는 예입니다.

    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

이것은 어떤 자바 버전입니까?
Muhammad Gelbana

16
SimpleDateFormat dateFormat = new SimpleDateFormat( "LLLL", Locale.getDefault() );
dateFormat.format( date );

일부 언어 (예 : 러시아어)의 경우 이것은 독립형 월 이름을 얻는 유일한 올바른 방법입니다.

이것은 당신이 사용하는 경우 당신이 무엇을 얻을 getDisplayName으로부터 Calendar또는 DateFormatSymbols월로 :

января (전체 날짜 문자열 : " 10 января, 2014 ")

그러나 독립형 월 이름의 경우 다음과 같이 예상됩니다.

январь


RU 로케일에 대한 정답입니다. 안드로이드 SDK에는 'LLLL'사양이 포함되어 있지 않습니다.
Anfet

12

Joda-Time

Joda-Time을 사용하는 것은 어떻습니까 ? 작업하기에 훨씬 더 나은 날짜-시간 API입니다 ( January여기서는 1 월을 의미합니다. 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 );

1
감사하지만 난 내 옛날에 행복 SimpleDateFormatDate
ogzd

@ogzd. 너의 소원. 하지만 꼭 한번 시도해 보시기 바랍니다. 노래하는 것을 좋아할 것입니다.
Rohit Jain 2013

@ogzd. 월 번호에서 월 이름을 얻는 방법을 게시했습니다. BTW, 왜 그렇게 하시겠습니까?
Rohit Jain 2013

10

Month::getDisplayName

Java 8부터 Monthenum을 사용하십시오 . 이 getDisplayName방법은 월 이름을 자동으로 지역화합니다.

통과하다:

  • A는 TextStyle단축 된 시간이나 방법을 결정합니다.
  • A는 Locale약자, 문장 부호 등을 위해 사용 번역에 사용 된 인간의 언어와 문화적 규범을 지정합니다

예:

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

9

오래된 질문일지도 모르지만 지수를 알면 달의 이름을 알기 위해 한 줄로

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

또는 짧은 이름

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

여러분의 양해하여 주시기 바랍니다 monthNumber반환 배열 위의 방법 중 하나는 0부터 카운트를 시작해야합니다 있도록하면서 시작 1에서 계산.


3

이 코드는 언어를 지원합니다. Android 앱에서 사용했습니다.

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

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

1
이 코멘트는, 완벽하게 작동 단지 작은 비트하지만 완전히 잘못
Иво Недев

3

나는 이것이 훨씬 더 쉽다는 것을 알았다 ( 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));
}

Month1 월 = 1로 색인을 시작 하지 않는 반면 달력은 1 월 = 0으로 시작합니까? Month.of(calendar.get(Calendar.MONTH));1 월의 경우 실패하지 않을까요 ?
MCO

2

다음과 같이 한 줄을 얻을 수 있습니다. String monthName = new DataFormatSymbols.getMonths()[cal.get(Calendar.MONTH)]


2

이것은 나를 위해 작동합니다.

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

일방 통행:

우리는이 Month자바 API를 ( java.time.Month). 우리는 사용하여 얻을 수 있습니다Month.of(month);

여기서는 Month숫자로 인덱싱되므로 Month.JANUARY위의 API에서 1, 2, 3, 4와 같은 인덱스를 제공하거나 제공 할 수 있습니다 .

두 번째 방법 :

ZonedDateTime.now().getMonth();

에서 사용할 수 있습니다 java.time.ZonedDateTime.


1

이 주제의 응답을 기반으로 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]
}

1

이것은 나를 위해 일했습니다.

        import java.text.SimpleDateFormat;
        import java.util.Calendar;


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

0
DateFormat date =  new SimpleDateFormat("dd/MMM/yyyy");
Date date1 = new Date();
System.out.println(date.format(date1));

1
귀하의 답변은 정확할 수 있지만 품질이 좋지 않습니다. 이 답변이 올바른 이유를 자세히 설명해주십시오.
SubliemeSiem

1
@SubliemeSiem 그냥 형식을 변경하고 가장 간단한 방법으로 수행하려고합니다. MM- 01, 02, 03과 같은 정수로 월 이름을 반환합니다. MMM-jan, feb, mar와 같이 짧게 월 이름을 반환합니다. MMMM-1 월과 같은 문자열 형식으로 전체 월 이름을 반환합니다.
Amit Mishra

이는 아니라 올바른 날짜 포맷에 대한 대답. 날짜 또는 달력 개체를 사용하고 포맷터로 서식을 지정합니다. 질문 자체는 나쁘다
Mickey Perlstein 2017

0

월의 영어 이름을 반환합니다. 04는 APRIL을 반환합니다.

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

간단하고 직접적인 제안, 감사합니다. 코드가 컴파일되지 않습니다. 반환 유형을 선언 Month하거나 toString결과를 반환하기 전에 적용 해야합니다.
Ole VV

-3

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>

이 질문에 대한 답변을 볼 수 없습니다.
jhpg
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.