2017-09-25 10 views
0

내가, 내가 날짜를 가지고 간단한 운동을 할 그 90 일을 추가하고,이 같은 뭔가를 포맷하려고 :해 GregorianCalendar와 DateFormat의 자바

년 4 월 20 일 월요일 1998 년

GregorianCalendarDateFormat을 사용하여이 작업을 수행합니다. 지금까지,이 컴파일 코드를 가지고 있지만, 나는 주어진 ObjectDate으로 포맷 할 수 없습니다 런타임 오류 얻을 :

import java.util.*; 
import java.text.*; 

class Assignment21 { 
    public static void main(String args[]) { 
     GregorianCalendar ddate = new GregorianCalendar(1994, 10, 20); 
     ddate.add(Calendar.DAY_OF_MONTH, 90); 
     SimpleDateFormat sdf = new SimpleDateFormat("EEE, MM dd, yyyy"); 
     String date = sdf.format(ddate); 
    } 
} 

어떻게 정확하게 출력 미리 정의 된 GregorianCalendar 날짜가 DateFormat를 사용 할 수 있습니다?

+2

'SimpleDateFormat'에는'Calendar' 매개 변수를 취하는'format' 메소드가 없습니다. – Berger

+0

DateFormat을 사용해야합니까? – JMV12

+0

캘린더 API에서 1 월은 0으로 인덱싱되며 (1 월은 '0'), 10 월은 실제로 11 월입니다. (알고 계시면 확실하지 않지만 어쨌든주의해야합니다) . 2 - 1998 년 4 월 20 일 월요일의 형식을 정확하게 취득하기 위해서는,'new SimpleDateFormat ("EEEE, MMMM dd, yyyy", Locale.US)'를 사용해야합니다.'java.util.Locale'은 언어 설정하지 않으면 JVM 기본값이 사용되며 항상 영어가 보장되지는 않습니다. 3 가능한 경우 - 새로운 java.time API를 선호합니다. [@Basil Bourque의 답변] (https://stackoverflow.com/a/46408956/7605325)에서 설명합니다. –

답변

2

당신은 당신의 코드를 해결하는 데 :

대신

String date = sdf.format(ddate); 

을 시도 :

String date = sdf.format(ddate.getTime()); 
+0

정말 고마워요! 내가 놓친 그런 간단한 일. – JMV12

1

java.time

이제 기존 있습니다 귀찮은 된 클래스를 사용하는 java.time 클래스를 대신합니다.

LocalDate ld = LocalDate.of(1998 , 1 , 20) ; 
LocalDate ldLater = ld.plusDays(90) ; 

java.time이 자동으로 현지화됩니다.

DateTimeFormatter f = DateTimeFormatter.ofLocalizedDate(FormatStyle.FULL).withLocale(Locale.US) ; 
String output = ldLater.format(f) ;