tl; dr
현대적인 접근법은 java.time 클래스를 사용합니다 .
YearMonth.from(
ZonedDateTime.parse(
"Mon Mar 14 16:02:37 GMT 2011" ,
DateTimeFormatter.ofPattern( "E MMM d HH:mm:ss z uuuu" )
)
).toString()
2011-03
레거시 날짜-시간 수업 피하기
현대적인 방법은 java.time 클래스입니다. 오래된 날짜-시간 수업 Calendar
은 제대로 설계되지 않았고 혼란스럽고 번거로운 것으로 입증되었습니다.
문자열 입력과 일치하도록 사용자 정의 포맷터를 정의하십시오.
String input = "Mon Mar 14 16:02:37 GMT 2011";
DateTimeFormatter f = DateTimeFormatter.ofPattern( "E MMM d HH:mm:ss z uuuu" );
로 구문 분석하십시오 ZonedDateTime
.
ZonedDateTime zdt = ZonedDateTime.parse( input , f );
당신은 년과 달에 관심이 있습니다. java.time 클래스에는 YearMonth
해당 목적을위한 클래스가 포함됩니다 .
YearMonth ym = YearMonth.from( zdt );
필요한 경우 연도 및 월 번호를 조사 할 수 있습니다.
int year = ym.getYear();
int month = ym.getMonthValue();
그러나이 toString
방법은 표준 ISO 8601 형식으로 문자열을 생성 합니다.
String output = ym.toString();
이것을 모두 합치십시오.
String input = "Mon Mar 14 16:02:37 GMT 2011";
DateTimeFormatter f = DateTimeFormatter.ofPattern( "E MMM d HH:mm:ss z uuuu" );
ZonedDateTime zdt = ZonedDateTime.parse( input , f );
YearMonth ym = YearMonth.from( zdt );
int year = ym.getYear();
int month = ym.getMonthValue();
콘솔로 덤프하십시오.
System.out.println( "input: " + input );
System.out.println( "zdt: " + zdt );
System.out.println( "ym: " + ym );
입력 : 월요일 3 월 14 일 16:02:37 GMT 2011
zdt : 2011-03-14T16 : 02 : 37Z [GMT]
ym : 2011-03
라이브 코드
IdeOne.com에서 실행되는이 코드를 참조하십시오 .
변환
당신이 경우 해야한다 이 Calendar
객체를, 당신은으로 변환 할 수 있습니다 GregorianCalendar
기존의 클래스에 추가하여 새로운 방법.
GregorianCalendar gc = GregorianCalendar.from( zdt );
java.time에 대하여
java.time의 프레임 워크는 나중에 자바 8에 내장되어 있습니다. 이 클래스는 까다로운 기존에 대신 기존 과 같은 날짜 - 시간의 수업을 java.util.Date
, Calendar
, SimpleDateFormat
.
Joda 타임 프로젝트는 현재의 유지 관리 모드 , java.time로 마이그레이션을 조언한다.
자세한 내용은 Oracle Tutorial을 참조하십시오 . 많은 예제와 설명을 보려면 스택 오버플로를 검색하십시오. 사양은 JSR 310 입니다.
java.time 클래스는 어디서 구할 수 있습니까?
ThreeTen - 추가 프로젝트 추가 클래스와 java.time를 확장합니다. 이 프로젝트는 향후 java.time에 추가 될 수있는 입증 된 근거입니다. 당신은 여기에 몇 가지 유용한 클래스와 같은 찾을 수 있습니다 Interval
, YearWeek
, YearQuarter
, 그리고 더 .