2014-02-05 109 views
1

我正試圖用Calender類獲取當前日期。我在tomcat上運行我的web應用程序。但我不明白爲什麼它將月份的一天顯示爲36.下面是我的代碼。Java日曆類顯示不正確的日期

SimpleDateFormat df = new SimpleDateFormat("YYYY/MM/DD hh:mm:ss"); 
Calendar cal = Calendar.getInstance(); 
System.out.println("Current Date Time : " + df.format(cal.getTime())); 

輸出

Current Date Time : 2014/02/36 04:30:14 

任何人都可以請解釋如何能每天是36?

Calender類是顯示系統時間還是tomcat服務器運行自己的時間?

+1

順便說一句,如果你任意選擇使用斜線,可以考慮使用連字符。連字符在年,月,日訂單中很常見。該格式由國際[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601)標準格式定義。 –

回答

5

那是因爲D代表每年的。您需要使用dd代替月份的月份。看看docs關於不同的模式和他們的表示。

+1

感謝它現在正常工作 – underdog

+2

+1捕捉分鐘錯誤 – SpringLearner

+1

@ShivangSarawagi確實,您需要閱讀該答案中鏈接的文檔。你的「YYYY」應該是小寫的,你的「hh」應該是大寫的。 –

1

似乎你想要的格式幾乎是標準ISO 8601 format。如果是這樣,您應該知道,取代捆綁的java.util.Date/Calendar類的Joda-Time庫默認情況下使用ISO 8601格式。所以不需要定義一個格式化器,Joda-Time已經有一個內置的。

與Java 8捆綁在一起的新java.time.* package(受Joda-Time啓發)默認情況下也使用ISO 8601格式。

使用喬達時間2.3一些示例代碼...

DateTimeZone timeZone = DateTimeZone.forID("Europe/Paris"); 
DateTime dateTime_Paris = new DateTime(2014, 1, 24, 10, 0, 0, timeZone); 

// Convert to UTC/GMT. 
DateTime dateTime_UTC = dateTime_Paris.toDateTime(DateTimeZone.UTC); 

System.out.println("dateTime_Paris: " + dateTime_Paris); 
System.out.println("dateTime_UTC: " + dateTime_UTC); 

當運行...

dateTime_Paris: 2014-01-24T10:00:00.000+01:00 
dateTime_UTC: 2014-01-24T09:00:00.000Z