中的Java-8做到這一點,最好的辦法是不羅勒布爾克的有缺陷的答案,但這種方法:
String startDate = "2016 01 02";
String passedDate = "2016 02 29";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy MM dd");
LocalDate date1 = LocalDate.parse(startDate, formatter);
LocalDate date2 = LocalDate.parse(passedDate, formatter);
long elapsedDays = ChronoUnit.DAYS.between(date1, date2);
System.out.println(elapsedDays); // 58 (correct)
建議的使用java.time.Period.getDays()
儘快是危險的,往往是錯誤的經過持續時間超過一個月。整個Period
是P1M27D所以這段代碼有效只查詢經過的天量部分(也有一個經過一個月):使用類
System.out.println(Period.between(date1, date2).getDays()); // 27 (WRONG!!!)
一個令人滿意的解決方案java.util.Date
,GregorianCalendar
等是很難找到的。您可以使用Tacktheritrix的答案,但必須注意以下事實:經過計算的日曆天數可能因java.util.Date
的子日期部分而有所不同,並且由於忽略了日光節約開關而不可靠(世界許多地方的時鐘跳了一個小時)。
備註:至少8外部庫也爲您的問題提供了很好的答案。但是我認爲,除非您尚未使用Java-8,否則您的簡單用例不適用於嵌入額外的庫。如何計算兩個日期之間經過的日期的任何替代解決方案都不會比Java-8更容易 - 只是相似。由於您接受了Basil Bourque的Java-8相關答案,因此我認爲您確實在使用Java-8,因此我忽略瞭如何解決與其他庫有關的問題的答案。
優秀的迴應,我正在瀏覽LocalDate方法,而且我可能讀錯了,但有沒有一種方法只返回本地日期,例如今天的'2015 04 11'? – Bob
'now()'能夠從程序後期的日期中減去,例如'LocalDate localDate = formatter.parse(input,LocalDate :: from);' – Bob
@ user38254您似乎仍然在合併日期時間值與他們的字符串表示。要獲得「今日」,只需調用LocalDate today = LocalDate.now(ZoneId.of(「America/Montreal」);)'。時區對確定一個日期至關重要(考慮一下!)。對於字符串,使用上面看到的格式化程序:'字符串輸出= today.format(formatter);'。搜索關於此主題的其他StackOveflow頁面。 –