2017-01-17 51 views
4

我有一個給定日期:如何獲得這個月的最後一天,在指定日期的

01/10/2017(mm/dd/yyyy) 

Calendar c = c.getInstance(); 

c.setTime(date); 

現在指向該月的最後一天,我用下面的代碼:

c.set(Calendar.Date, c.getActualMaximum(Calendar.Date)); 

預計產量:2017年1月31日

原來的輸出:2017年2月1日

我沒有得到預期的輸出。它在下個月的第一天回到我身邊。

任何人都可以幫我嗎?

+1

爲了記錄在案:請看把代碼放到你的帖子的時候使用*標記*;不要把所有東西都當成普通的文本! – GhostCat

+0

請在發佈之前搜索Stack Overflow。 –

回答

8

你最好使用Java 8這裏的新日期時間功能:

LocalDate date = LocalDate.of(2000, Month.OCTOBER, 15); 
LocalDate lastOfMonth = date.with(TemporalAdjusters.lastDayOfMonth()); 
System.out.printf("last day of Month: %s%n", lastOfMonth); 

是的,你可以在理論上也可以使用日曆對象,做各種低級操作自己的。但機會是:你會得到錯誤的...好吧,除非你看here並按照從那裏的建議。

但是,正如Basil所指出的:310項目非常接近java.time(因爲後者的設計與前者相匹配)。並且310可以「移植」到Java7的back。因此,如果有多個地方需要處理日期,我會仔細研究:通過使用「理智」的日期/時間庫,讓您的生活更輕鬆。

+0

其實我是在Java 7環境下開發的。 –

+0

然後我會說:DUP被指出應該回答你所有的問題。 – GhostCat

+1

請參閱[** ThreeTen-Backport **](http://www.threeten.org/threetenbp/)項目,瞭解Java 6和Java 7的大部分java.time功能的後端端口。進一步適用於Android在ThreeTenABP項目 –

0

我懷疑mm/dd/yyyy。試試這個

Date d = new SimpleDateFormat("MM/dd/yyyy").parse("01/10/2017"); 
Calendar c = Calendar.getInstance(); 
c.setTime(d); 
c.set(Calendar.DATE, c.getActualMaximum(Calendar.DATE)); 
System.out.println(c.getTime()); 

它給預產期:

週二年01月31日00:00:00 EET 2017年

相關問題