2016-05-13 124 views
0

我在Java 7上看到了很多關於如何計算兩個日期之間的天數的例子,但我發現它們沒有正確包含閏年。Java 7獲得兩個日期之間的天數,閏年正確計算

我已經看到了這個例子,但顯然閏年不包括:

Calculating days between two dates with in java

所以我想看看正確的Java代碼是如何獲得的天數,而無需使用約達時間和Java 8?

+0

最簡單的方法是將您的陽曆日期轉換爲儒略日數。這在維基百科上有描述(https://en.wikipedia.org/wiki/Julian_day#Converting_Julian_or_Gregorian_calendar_date_to_Julian_day_number)。一旦你有兩個日期的朱利安天數,減去它們。 –

+1

不,對不起,最簡單的方法是使用Jodatime或Java 8 :) –

+0

我提到我對Java 7感興趣。出於具體原因,我正在使用Java 7進行工作。 – DarioBB

回答

0

這算什麼?

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)

+2

但在穿越夏令時時不起作用。 「2016-03-13」和「2016-03-14」(America/New_York)之間有0天。 – Andreas

+1

由於輸入是純日期,並且DST永遠不會超過12小時,所以可以通過進行舍入舍入來修復,即添加半天:'(d2.getTime() - d1.getTime()+ 1000 * 60 * 60 * 12)/(1000 * 60 * 60 * 24)' – Andreas

+0

這給我的機器上的'1'(CET/CEST)。無論如何,我們需要完整的規範來說明我們認爲「一天差異」。例如。 '2016-03-13 23:12:05'和'2016-03-14 00:17:44'之間應該有什麼區別? –

相關問題