문자열로 된 월 이름


89

예를 들어 "May", "September", "November"와 같이 달의 이름을 문자열로 반환하려고합니다.

나는 시도했다 :

int month = c.get(Calendar.MONTH);

그러나 이것은 정수 (각각 5, 9, 11)를 리턴합니다. 월 이름은 어떻게 알 수 있습니까?

답변:


88

getDisplayName을 사용하십시오 .

이전 API 사용 String.format(Locale.US,"%tB",c);


나는 문제가있다 : getDisplayName (month, Calendar.LONG, Locale.US) 그리고 Eclipse는 Calendar.LONG 또는 Calendar.SHORT가 존재하지 않는다고 말합니다.
Gaby

그것은 매우 이상합니다. java.util.Calendar다른 Calendar수업이 아닌 사용 하고 계시죠?
진실성

예. getDisplayName () 및 관련 Calendar.LONG 및 Calendar.SHORT는 API 레벨 9 전용입니다. 그래서 레벨 9에서 작동하지만 레벨 7이 필요합니다 :(
Gaby

3
Formatter f = new Formatter();(선택적으로 로케일을 제공 할 수 있음) 그런 다음 String monthName = f.format("%tB",c).toString();또는 %tb짧은 이름.
진실성

5
또한 Locale.US 대신 Locale.getDefault ()를 사용하는 것이 좋습니다. :)
Shine

159

이것을 사용하십시오 :

Calendar cal=Calendar.getInstance();
SimpleDateFormat month_date = new SimpleDateFormat("MMMM");
String month_name = month_date.format(cal.getTime());

월 이름에는 전체 월 이름이 포함됩니다. 짧은 월 이름을 원하면 이것을 사용하십시오.

 SimpleDateFormat month_date = new SimpleDateFormat("MMM");
 String month_name = month_date.format(cal.getTime());

13
첫 번째 경우에는 "MMMM"이면 충분합니다.
yanchenko

114

문자열 변수에서 월을 얻으려면 아래 코드를 사용하십시오.

예를 들어 9 월은 다음과 같습니다.

M-> 9

MM-> 09

MMM-> 9 월

MMMM-> 9 월

String monthname=(String)android.text.format.DateFormat.format("MMMM", new Date())

1
네, 감사합니다, 그것은 모든 언어로 내가 (프랑스어, 영어, 독일어)를 사용, 마치 마법처럼 작동합니다
Chrysotribax

45

"MMMM"은 확실히 올바른 솔루션이 아닙니다 (여러 언어에서 작동하더라도). "LLLL"패턴을 SimpleDateFormat

독립형 월 이름에 대한 ICU 호환 확장으로 'L'에 대한 지원이 2010 년 6 월 Android 플랫폼에 추가되었습니다 .

영어로 'MMMM'과 'LLLL'로 인코딩하는 데 차이가 없더라도 다른 언어도 생각해야합니다.

Calendar.getDisplayName를 들어 러시아어로 1 월에 "MMMM"패턴을 사용하면 다음과 같은 결과를 얻을 수 있습니다 Locale.

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

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

январь

올바른 솔루션은 다음과 같습니다.

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

모든 번역의 출처에 관심이 있다면 여기 에 그레고리력 번역에 대한 참조 가 있습니다 (페이지 상단에 링크 된 다른 캘린더).


'LLLL'은 Java 8부터 사용할 수 있으며 SimpleDateFormat과 함께 'MMMM'을 사용할 수 있으며 독립 실행 형 버전에서도 완벽하게 작동합니다.
juanheyns

23

이렇게 간단합니다

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

Calendar.LONG은 월의 전체 이름을 가져오고 Calendar.SHORT는 이름을 짧게 제공합니다. 예 : Calendar.LONG은 January Calendar를 반환합니다 .SHORT는 Jan을 반환합니다.


좋은 대답입니다. 나는 알람을 위해 캘린더를 혼자 설정하고 있었고 나중에 월 이름을 가져와야했습니다. 완벽한 당신 answer.Thank
Ajji

10

다른 경우에 유용한이 답변을 유지하지만 @trutheality 답변이 가장 간단하고 직접적인 방법 인 것 같습니다.

DateFormatSymbols 를 사용할 수 있습니다.

DateFormatSymbols(Locale.FRENCH).getMonths()[month]; // FRENCH as an example

5

Android에서 우크라이나어, 러시아어, 체코 어와 같은 언어에 대해 올바르게 형식이 지정된 표준 월 이름을 얻는 유일한 방법

private String getMonthName(Calendar calendar, boolean short) {
    int flags = DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_NO_MONTH_DAY | DateUtils.FORMAT_NO_YEAR;
    if (short) {
        flags |= DateUtils.FORMAT_ABBREV_MONTH;
    }
    return DateUtils.formatDateTime(getContext(), calendar.getTimeInMillis(), flags);
}

API 15-25에서 테스트 됨

의 출력 입니다 Май 하지만 Мая


3

러시아인.

Month
.MAY
.getDisplayName(
    TextStyle.FULL_STANDALONE ,
    new Locale( "ru" , "RU" )
)

май

미국에서의 영어.

Month
.MAY
.getDisplayName(
    TextStyle.FULL_STANDALONE ,
    Locale.US
)

할 수있다

코드는 IdeOne.com에서 실시간으로 실행 됩니다.

ThreeTenABP 및 java.time

여기에 현대적인 대답이 있습니다. 이 질문은 2011 년에 요청했다, 때 CalendarGregorianCalendar일반적으로 그들은 항상 가난하게 디자인되었다하더라도 날짜와 시간을 사용 하였다. 지금은 8 년 전이고 그 수업은 오래되었습니다. 아직 API 레벨 26이 아니라고 가정 할 때 Android에서 조정 한 java.time 백 포트, 최신 Java 날짜 및 시간 API가 포함 된 ThreeTenABP 라이브러리를 사용하는 것이 좋습니다. java.time은 작업하기에 훨씬 좋습니다.

정확한 필요와 상황에 따라 두 가지 옵션이 있습니다.

  1. 사용 MonthgetDisplayName방법.
  2. 를 사용합니다 DateTimeFormatter.

월 사용

    Locale desiredLanguage = Locale.ENGLISH;
    Month m = Month.MAY;
    String monthName = m.getDisplayName(TextStyle.FULL, desiredLanguage);
    System.out.println(monthName);

이 스 니펫의 출력은 다음과 같습니다.

할 수있다

일부 언어에서는 TextStyle.FULL또는 TextStyle.FULL_STANDALONE. 두 가지 중 어느 것이 귀하의 상황에 맞는지 확인해야합니다.

DateTimeFormatter 사용

시간이 있든 없든 데이트가 있다면 DateTimeFormatter더 실용적입니다. 예를 들면 :

    DateTimeFormatter monthFormatter = DateTimeFormatter.ofPattern("MMMM", desiredLanguage);

    ZonedDateTime dateTime = ZonedDateTime.of(2019, 5, 31, 23, 49, 51, 0, ZoneId.of("America/Araguaina"));
    String monthName = dateTime.format(monthFormatter);

나는 ZonedDateTime이전 Calendar클래스 를 가장 가까운 대체물로 사용하고 있습니다. 위의 코드는 작동합니다 LocalDateA, LocalDateTime, MonthDay, OffsetDateTimeYearMonth도.

당신은이 있어요 경우 Calendar아직 java.time로 업그레이드하지 레거시 API에서? a로 변환하고 ZonedDateTime위와 같이 진행하십시오.

    Calendar c = getCalendarFromLegacyApi();
    ZonedDateTime dateTime = DateTimeUtils.toZonedDateTime(c);

나머지는 이전과 동일합니다.

질문 : java.time에는 Android API 레벨 26이 필요하지 않습니까?

java.time은 이전 및 최신 Android 장치 모두에서 잘 작동합니다. 최소한 Java 6 만 필요합니다 .

  • Java 8 이상 및 최신 Android 장치 (API 레벨 26부터)에는 최신 API가 내장되어 있습니다.
  • 비 Android Java 6 및 7에서는 최신 클래스의 백 포트 인 ThreeTen 백 포트를 가져옵니다 (JSR 310의 경우 ThreeTen, 하단의 링크 참조).
  • (이전) Android에서는 ThreeTen Backport의 Android 버전을 사용합니다. ThreeTenABP라고합니다. 그리고 org.threeten.bp하위 패키지 를 사용 하여 날짜 및 시간 클래스를 가져와야합니다 .

연결


2

Calendar객체 를 사용하는 것이 좋으며 Locale언어마다 월 이름이 다르기 때문에 :

// index can be 0 - 11
private String getMonthName(final int index, final Locale locale, final boolean shortName)
{
    String format = "%tB";

    if (shortName)
        format = "%tb";

    Calendar calendar = Calendar.getInstance(locale);
    calendar.set(Calendar.MONTH, index);
    calendar.set(Calendar.DAY_OF_MONTH, 1);

    return String.format(locale, format, calendar);
}

전체 월 이름의 예 :

System.out.println(getMonthName(0, Locale.US, false));

결과: January

짧은 월 이름의 예 :

System.out.println(getMonthName(0, Locale.US, true));

결과: Jan


2

"2018 Nov 01 16:18:22"형식으로 날짜와 시간을 가져 오는 샘플 방법은 다음을 사용합니다.

DateFormat dateFormat = new SimpleDateFormat("yyyy MMM dd HH:mm:ss");
        Date date = new Date();
         dateFormat.format(date);

0

독립형 월 이름을 얻는 것은 자바에서 "올바르게"수행하기가 놀랍도록 어렵습니다. (적어도이 글을 쓰는 현재. 저는 현재 Java 8을 사용하고 있습니다).

문제는 러시아어와 체코 어를 포함한 일부 언어에서 월 이름의 독립 실행 형 버전이 "포맷"버전과 다르다는 것입니다. 또한 단일 Java API가 "최상의"문자열을 제공하지 않는 것으로 보입니다. 지금까지 여기에 게시 된 대부분의 답변은 서식 버전 만 제공합니다. 아래 붙여 넣기는 한 달 이름의 독립 실행 형 버전을 가져 오거나 모두가 포함 된 배열을 가져 오는 작업 솔루션입니다.

나는 이것이 다른 누군가의 시간을 절약하기를 바랍니다!

/**
 * getStandaloneMonthName, This returns a standalone month name for the specified month, in the
 * specified locale. In some languages, including Russian and Czech, the standalone version of
 * the month name is different from the version of the month name you would use as part of a
 * full date. (Different from the formatting version).
 *
 * This tries to get the standalone version first. If no mapping is found for a standalone
 * version (Presumably because the supplied language has no standalone version), then this will
 * return the formatting version of the month name.
 */
private static String getStandaloneMonthName(Month month, Locale locale, boolean capitalize) {
    // Attempt to get the standalone version of the month name.
    String monthName = month.getDisplayName(TextStyle.FULL_STANDALONE, locale);
    String monthNumber = "" + month.getValue();
    // If no mapping was found, then get the formatting version of the month name.
    if (monthName.equals(monthNumber)) {
        DateFormatSymbols dateSymbols = DateFormatSymbols.getInstance(locale);
        monthName = dateSymbols.getMonths()[month.getValue()];
    }
    // If needed, capitalize the month name.
    if ((capitalize) && (monthName != null) && (monthName.length() > 0)) {
        monthName = monthName.substring(0, 1).toUpperCase(locale) + monthName.substring(1);
    }
    return monthName;
}

/**
 * getStandaloneMonthNames, This returns an array with the standalone version of the full month
 * names.
 */
private static String[] getStandaloneMonthNames(Locale locale, boolean capitalize) {
    Month[] monthEnums = Month.values();
    ArrayList<String> monthNamesArrayList = new ArrayList<>();
    for (Month monthEnum : monthEnums) {
        monthNamesArrayList.add(getStandaloneMonthName(monthEnum, locale, capitalize));
    }
    // Convert the arraylist to a string array, and return the array.
    String[] monthNames = monthNamesArrayList.toArray(new String[]{});
    return monthNames;
}

0

String에서 월의 이름을 가져옵니다.

 private String getMonthName() {
    Calendar cal = Calendar.getInstance();
    SimpleDateFormat month_date = new SimpleDateFormat("MMMM");
    String month_name = month_date.format(cal.getTime());
    return month_name;
}

용법:

String monthName = getMonthName();

오래되고 낡고 악명 높을 정도로 성가신 SimpleDateFormat클래스와 친구들을 사용하지 않는 것을 고려하십시오 . 당신이 중 하나를 사용할 수 있는지 확인 desugaring를 하거나 추가 ThreeTenABP을 사용 java.time, 현대 자바 날짜와 시간 API하기 위해, 안드로이드 프로젝트에. 함께 작업하는 것이 훨씬 더 좋습니다.
Ole VV

John이 가장 많이 뽑은 답변에 아직 포함되지 않은 많은 부분을 기여하고 있습니까?
Ole VV
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.