2016-05-13 5 views
0

Java 7で2つの日付の間の日数を計算する方法を多く見てきましたが、うるう年が正しく含まれていないことがわかりました。Java 7閏年を正しく計算した2つの日付の間の日数を取得する

私はこの例を見て、どうやら閏年ましたが含まれていません。

Calculating days between two dates with in java

をだから私はジョダ時間とJavaを使用せずに日数を取得する方法を正しいJavaコードを見てみたいです8?

+0

最も簡単な方法は、ユリウス日にあなたのグレゴリオ暦の日付を変換することです数。これは[Wikipediaで](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を出力するので、うるう年に適しています。

更新:それはあまりにも夏時間を処理するので、あなたは+ 12hをハックとの優れているコメントAndreas年代によると:(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

私のマシン(CET/CEST)に '1'が与えられます。とにかく、我々は「一日の違い」とみなすものについて完全な仕様が必要です。例えば。 '2016-03-13 23:12:05'と' 2016-03-14 00:17:44'の違いは? –

関連する問題