[java] Integer를 Java에서 지역화 된 월 이름으로 어떻게 변환 할 수 있습니까?

정수를 얻고 다양한 로케일의 월 이름으로 변환해야합니다.

로케일 en-us의 예 :
1-> 1 월
2 일-> 2 월

로케일 es-mx의 예 :
1-> Enero
2-> Febrero



답변

import java.text.DateFormatSymbols;
public String getMonth(int month) {
    return new DateFormatSymbols().getMonths()[month-1];
}


답변

독립형 월 이름에는 LLLL을 사용해야합니다. 이것은 다음 SimpleDateFormat과 같은 문서에 문서화되어 있습니다.

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


답변

tl; dr

Month                             // Enum class, predefining and naming a dozen objects, one for each month of the year. 
.of( 12 )                         // Retrieving one of the enum objects by number, 1-12. 
.getDisplayName(
    TextStyle.FULL_STANDALONE ,
    Locale.CANADA_FRENCH          // Locale determines the human language and cultural norms used in localizing. 
)

java.time

Java 1.8 (또는 ThreeTen-Backport 가있는 1.7 및 1.6 )부터 다음을 사용할 수 있습니다.

Month.of(integerMonth).getDisplayName(TextStyle.FULL_STANDALONE, locale);

integerMonth1 기반 1 월입니다 즉. 범위는 1 월 -12 월의 경우 항상 1-12입니다 (예 : 그레고리력 만 해당).


답변

SimpleDateFormat을 사용합니다. 누군가가 월별 달력을 만드는 더 쉬운 방법이 있다면 나를 바로 잡으십시오. 나는 지금 코드에서 이것을하고 나는 그렇게 확신하지 않습니다.

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


public String formatMonth(int month, Locale locale) {
    DateFormat formatter = new SimpleDateFormat("MMMM", locale);
    GregorianCalendar calendar = new GregorianCalendar();
    calendar.set(Calendar.DAY_OF_MONTH, 1);
    calendar.set(Calendar.MONTH, month-1);
    return formatter.format(calendar.getTime());
}


답변

내가 할 방법은 다음과 같습니다. 범위 확인은 int month당신에게 맡기겠습니다 .

import java.text.DateFormatSymbols;

public String formatMonth(int month, Locale locale) {
    DateFormatSymbols symbols = new DateFormatSymbols(locale);
    String[] monthNames = symbols.getMonths();
    return monthNames[month - 1];
}


답변

SimpleDateFormat 사용.

import java.text.SimpleDateFormat;

public String formatMonth(String month) {
    SimpleDateFormat monthParse = new SimpleDateFormat("MM");
    SimpleDateFormat monthDisplay = new SimpleDateFormat("MMMM");
    return monthDisplay.format(monthParse.parse(month));
}


formatMonth("2"); 

결과 : 2 월


답변

분명히 Android 2.2에는 SimpleDateFormat에 버그가 있습니다.

월 이름을 사용하려면 리소스에서 직접 정의해야합니다.

<string-array name="month_names">
    <item>January</item>
    <item>February</item>
    <item>March</item>
    <item>April</item>
    <item>May</item>
    <item>June</item>
    <item>July</item>
    <item>August</item>
    <item>September</item>
    <item>October</item>
    <item>November</item>
    <item>December</item>
</string-array>

그런 다음 다음과 같이 코드에서 사용하십시오.

/**
 * Get the month name of a Date. e.g. January for the Date 2011-01-01
 *
 * @param date
 * @return e.g. "January"
 */
public static String getMonthName(Context context, Date date) {

    /*
     * Android 2.2 has a bug in SimpleDateFormat. Can't use "MMMM" for
     * getting the Month name for the given Locale. Thus relying on own
     * values from string resources
     */

    String result = "";

    Calendar cal = Calendar.getInstance();
    cal.setTime(date);
    int month = cal.get(Calendar.MONTH);

    try {
        result = context.getResources().getStringArray(R.array.month_names)[month];
    } catch (ArrayIndexOutOfBoundsException e) {
        result = Integer.toString(month);
    }

    return result;
}