2017-09-25 113 views
0

我試圖做一個簡單的練習,我需要一個日期,加90天,然後將其格式化爲這樣的事情:GregorianCalendar的日期格式和Java的

週一,1998年4月20日,

我要用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

只是3個小細節:1-在'Calendar' API中,月份是零索引的(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)中解釋。 – 2017-09-25 15:58:11

回答

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) ;