我在Java 7上看到了很多關於如何計算兩個日期之間的天數的例子,但我發現它們沒有正確包含閏年。Java 7獲得兩個日期之間的天數,閏年正確計算
我已經看到了這個例子,但顯然閏年不包括:
Calculating days between two dates with in java
所以我想看看正確的Java代碼是如何獲得的天數,而無需使用約達時間和Java 8?
我在Java 7上看到了很多關於如何計算兩個日期之間的天數的例子,但我發現它們沒有正確包含閏年。Java 7獲得兩個日期之間的天數,閏年正確計算
我已經看到了這個例子,但顯然閏年不包括:
Calculating days between two dates with in java
所以我想看看正確的Java代碼是如何獲得的天數,而無需使用約達時間和Java 8?
這算什麼?
package com.example;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DayDifference {
public static void main(String[] args) throws Exception {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date d1 = sdf.parse("2016-02-28");
Date d2 = sdf.parse("2016-03-01");
long diff = (d2.getTime() - d1.getTime())/(1000 * 60 * 60 * 24);
System.out.println("diff: " + diff);
}
}
這個輸出2,所以在閏年時效果很好。
更新:根據Andreas的評論你與+ 12H黑客更好,因爲它處理夏令太:(d2.getTime() - d1.getTime() + 1000 * 60 * 60 * 12)/(1000 * 60 * 60 * 24)
但在穿越夏令時時不起作用。 「2016-03-13」和「2016-03-14」(America/New_York)之間有0天。 – Andreas
由於輸入是純日期,並且DST永遠不會超過12小時,所以可以通過進行舍入舍入來修復,即添加半天:'(d2.getTime() - d1.getTime()+ 1000 * 60 * 60 * 12)/(1000 * 60 * 60 * 24)' – Andreas
這給我的機器上的'1'(CET/CEST)。無論如何,我們需要完整的規範來說明我們認爲「一天差異」。例如。 '2016-03-13 23:12:05'和'2016-03-14 00:17:44'之間應該有什麼區別? –
最簡單的方法是將您的陽曆日期轉換爲儒略日數。這在維基百科上有描述(https://en.wikipedia.org/wiki/Julian_day#Converting_Julian_or_Gregorian_calendar_date_to_Julian_day_number)。一旦你有兩個日期的朱利安天數,減去它們。 –
不,對不起,最簡單的方法是使用Jodatime或Java 8 :) –
我提到我對Java 7感興趣。出於具體原因,我正在使用Java 7進行工作。 – DarioBB