1에서 12 사이의 정수를 해당 달 이름으로 프로그래밍 방식으로 변환하고 싶습니다. (예 : 1 -> 1 월, 2 -> 2 월) 등을 사용할 수 있습니다.Java에서 달 이름 가져 오기
참고 : 자바 캘린더 클래스 만 사용하고 싶습니다. 스위치 케이스 또는 문자열 배열 솔루션을 제안하지 마십시오.
감사합니다.
1에서 12 사이의 정수를 해당 달 이름으로 프로그래밍 방식으로 변환하고 싶습니다. (예 : 1 -> 1 월, 2 -> 2 월) 등을 사용할 수 있습니다.Java에서 달 이름 가져 오기
참고 : 자바 캘린더 클래스 만 사용하고 싶습니다. 스위치 케이스 또는 문자열 배열 솔루션을 제안하지 마십시오.
감사합니다.
Calendar
클래스는 하나의 명령문에서 현지화 된 월 이름을 얻는 데 사용할 수있는 최상의 클래스는 아닙니다.
// Month as a number.
int month = 1;
// Sets the Calendar instance to the desired month.
// The "-1" takes into account that Calendar counts months
// beginning from 0.
Calendar c = Calendar.getInstance();
c.set(Calendar.MONTH, month - 1);
// This is to avoid the problem of having a day that is greater than the maximum of the
// month you set. c.getInstance() copies the whole current dateTime from system
// including day, if you execute this on the 30th of any month and set the Month to 1
// (February) getDisplayName will get you March as it automatically jumps to the next
// Month
c.set(Calendar.DAY_OF_MONTH, 1);
// Returns a String of the month name in the current locale.
c.getDisplayName(Calendar.MONTH, Calendar.LONG, Locale.getDefault());
위의 코드는 한 달 반환 다음
는(1 월 여기서 1) 만 Calendar
클래스를 사용 int
값으로 지정된 소망 한달 한달 이름을 얻는 예이다 이름은 시스템 로케일에 있습니다.
다른 로캘이 필요한 경우 을 Locale.US
과 같은 특정 로캘로 바꿔 다른 Locale
을 지정할 수 있습니다.
사용 DateFormatSymbols
자랑스럽게 bluebones.net에서 복사 및 붙여 넣기 :
import java.text.*;
String getMonthForInt(int m) {
String month = "invalid";
DateFormatSymbols dfs = new DateFormatSymbols();
String[] months = dfs.getMonths();
if (m >= 0 && m <= 11) {
month = months[m];
}
return month;
}
캘린더를 사용하면 질문에 표시됩니다. –
그런 다음 getDisplayName을 사용하면 camickr가 나타납니다. – Anurag
coolbird에서 대답을 얻었습니다. 당신의 해결책도 좋습니다! 조금 수정 한 경우, 한 문장의 요구 사항을 충족합니다.:) –
당신이 API를 읽나요? getDisplayName (...) 메소드는 시작하기 좋은 곳처럼 보입니다. 한 문장으로 처리하는 것은 끔찍한 요구 사항입니다.
Month.of(12).getDisplayName(TextStyle.FULL , Locale.US)
... 나 ...
Month.DECEMBER.getDisplayName(TextStyle.FULL , Locale.US)
12 월 지역화 된 이름을 가져 java.time
현대적인 방법을 사용하여
java.time.Month
열거 형입니다. 이 클래스는 현재 Date
및 Calendar
과 같이 문제가있는 오래된 레거시 날짜 - 시간 클래스를 대신하는 java.time 패키지의 일부입니다. TextStyle
문자열이 있어야 할 시간 또는 약식 결정.Locale
(a) 이름, 월 이름 등의 번역을위한 인간 언어 및 (b) 약어, 대문자, 구두점, 분리 기호 등의 문제를 결정하는 문화적 규범을 결정할 수 있습니다.예제 코드.
Month month = Month.of(7);
String outputConstantName = month.toString();
String outputMonthNameEnglish = month.getDisplayName(TextStyle.FULL , Locale.US);
String outputMonthQuébec = month.getDisplayName(TextStyle.FULL , Locale.CANADA_FRENCH);
개월.toString() -7 월
outputMonthNameEnglish :
outputMonthQuébec 7월
는 : 읽기 쉽고 편리하게 할 수 있습니다 이름이 아닌 개월 수에 의해Month
열거 객체를 사용
일 목, 덜 오류가 발생하기 쉬운. java.time
소개
String output = Month.JULY.getDisplayName(TextStyle.FULL , Locale.US) ;
java.util.Date
, Calendar
, & SimpleDateFormat
과 같이 문제가있는 이전 legacy 날짜 - 시간 클래스를 대체합니다. maintenance mode에있는 Joda-Time 프로젝트는 java.time 클래스로의 마이그레이션을 권장합니다.
자세히 알아 보려면 Oracle Tutorial을 참조하십시오. 그리고 많은 예제와 설명을 위해 스택 오버플로를 검색하십시오. 사양은 JSR 310입니다.
어디에서 java.time 클래스를 얻을 수 있습니까?
ThreeTen-Extra 프로젝트는 추가 클래스와 java.time를 확장합니다. 이 프로젝트는 향후 java.time에 추가 될 수있는 가능성을 입증합니다. 여기에 Interval
, YearWeek
, YearQuarter
및 more과 같은 유용한 클래스가 있습니다.
하나의 진술에 있지만, 이것은 나를 위해 충분한 답변입니다! 감사! –
실제로 getDisplayNames() 메소드를 살펴 보았습니다. Map를 반환하는 이유는 무엇입니까? Map 은 적절한 Integer 값을 가진 달에 액세스 할 수 있으므로 더 논리적이라고 생각합니다. 정수 값을 얻기 위해 월 이름으로 Map에 액세스해야한다는 요구 사항을 볼 수 없습니다. 나는 당신이 그 달을 얻는 데 사용할 최고의 수업이 아니라고 말할 때 그것이 무엇을 의미하는지 생각합니다. –
camickr
@camickr :'getDisplayNames' 메쏘드는 다른 클래스를 추가 한 새로운 유스 케이스를 지원하기 위해'Calendar' 클래스에 추가 된 것처럼 보입니다. 그 클래스의 많은 부분처럼 보이는'DateFormatSymbols'을 의심하고 JDK 1.6에 앞서 언급 한 메서드가 추가되었습니다. – coobird