在今天的日期,我應該得到上個月的第一個日期和最後一個日期。我無法想出任何邏輯。如何獲取上個月的第一個日期和最後一個日期? (Java)
例如,在通過05/30/2012
時,我應該得到04/01/2012
和04/30/2012
。
任何幫助將不勝感激。謝謝。
在今天的日期,我應該得到上個月的第一個日期和最後一個日期。我無法想出任何邏輯。如何獲取上個月的第一個日期和最後一個日期? (Java)
例如,在通過05/30/2012
時,我應該得到04/01/2012
和04/30/2012
。
任何幫助將不勝感激。謝謝。
使用JodaTime
DateMidnight now = new DateMidnight();
DateMidnight beginningOfLastMonth = now.minusMonths(1).withDayOfMonth(1);
DateMidnight endOfLastMonth = now.withDayOfMonth(1).minusDays(1);
System.out.println(beginningOfLastMonth);
System.out.println(endOfLastMonth);
輸出:
2012-04-01T00:00:00.000 + 02:00
2012-04-30T00:00:00.000 + 02:00
說明:一個DateMidnight對象是Date對象沒有一天的信息,這似乎是你需要的東西的時間。如果不是,則用上面的代碼中的DateTime替換所有出現的DateMidnight。
好,你可以創建一個日曆對象,將日期設置爲當前月的第一天(應該是第一:P),然後你可以做兩個操作:從您的日曆對象 你可以減去一個特定時期時間,例如一個月(這將給你前一個月的第一天,或一天,它會給你上一個月的最後一天。我沒有嘗試,但是這將是我的第一個步驟。
隨着Calendar
Calendar cal = Calendar.getInstance();
cal.add(Calendar.MONTH, -1);
cal.set(Calendar.DATE, 1);
Date firstDateOfPreviousMonth = cal.getTime();
cal.set(Calendar.DATE, cal.getActualMaximum(Calendar.DATE)); // changed calendar to cal
Date lastDateOfPreviousMonth = cal.getTime();
見
爲什麼這不是公認的答案? –
我們是否需要使用'getActualMinimum'?或者只是假設它總是1? – ADTC
對於日期,您可以假定它是公曆1的日期,但也有多個其他字段,[請查看此內容](http://grepcode.com/file/repository.grepcode.com/java/root/jdk /openjdk/8u40-b25/java/util/GregorianCalendar.java#GregorianCalendar.0MIN_VALUES –
還想添加一些東西給Jigar的答案。使用DateFormat
類來獲得你在問題中指定的格式輸入日期:
DateFormat df = DateFormat.getInstance(DateFormat.SHORT);
System.out.println(df.format(firstDateOfPreviousMonth));
System.out.println(df.format(lastDateOfPreviousMonth));
輸出:
04/01/12
04/30/12
謝謝肖恩.... –
你可以接受這個。 – Mdhar9e
YearMonth.now().minusMonths(1).atDay(1)
...和...
YearMonth.now().minusMonths(1).atEndOfMonth()
避免捆綁java.util.Date和.Calendar類,因爲它們是出了名的麻煩。請在Java 8及更高版本中使用java.time package。
java.time在Java中8所述的新java.time framework(Tutorial)具有用於此命令。
恰當地命名的YearMonth
類代表一年的一個月,沒有任何特定的日期或時間。從那裏我們可以詢問本月的第一天和最後幾天。
ZonedId zoneId = ZoneId.of("America/Montreal");
YearMonth yearMonthNow = YearMonth.now(zoneId);
YearMonth yearMonthPrevious = yearMonthNow.minusMonths(1);
LocalDate firstOfMonth = yearMonthPrevious.atDay(1);
LocalDate lastOfMonth = yearMonthPrevious.atEndOfMonth();
UPDATE:的Joda-Time項目現在處於maintenance mode,與球隊的java.time類建議遷移。見Tutorial by Oracle。
Joda-Time 2.8如果您不關心時間,請使用LocalDate
類。
LocalDate today = LocalDate.now(DateTimeZone.forID("Europe/Paris"));
LocalDate firstOfThisMonth = today.withDayOfMonth(1);
LocalDate firstOfLastMonth = firstOfThisMonth.minusMonths(1);
LocalDate endOfLastMonth = firstOfThisMonth.minusDays(1);
看到我的[similar answe r](http://stackoverflow.com/a/26321291/642706)複製問題以獲得更多關於此類代碼的討論。 –
Calendar cal = Calendar.getInstance();
cal.set(Calendar.DATE, 1);
cal.add(Calendar.DAY_OF_MONTH, -1);
Date lastDateOfPreviousMonth = cal.getTime();
cal.set(Calendar.DATE, 1);
Date firstDateOfPreviousMonth = cal.getTime();
+1和OP也希望有比上月 –
上喬達時間午夜的類和方法已被棄用的最後日期。使用'withTimeAtStartOfDay'方法。 –
僅供參考,[Joda-Time](http://www.joda.org/joda-time/)項目現在處於[維護模式](https://en.wikipedia.org/wiki/Maintenance_mode),該團隊建議遷移到[java.time](http://docs.oracle.com/javase/8/docs/api/java/time/package-summary.html)類。請參見[Oracle教程](https://docs.oracle.com/javase/tutorial/datetime/TOC.html)。 –