2017-09-11 20 views
-3

Javaの2つの日付の違いを調べる必要があります。その差は開始日と終了日を含みます。私は以下のコードを使ってみましたが、開始日と終了日は含まれていません。Javaの2つの日付の差異(開始日と終了日を含む)

long diffDays = Days.daysBetween(new DateTime(startDate), new DateTime(endDate)).getDays(); 

これを実現するユーティリティメソッドはありますか?

+2

を使用することができます[MCVE]を追加してください。 (期待される成果を有するデータ例を含む)。 – Fildor

+0

'Days'と' DateTime'はどのライブラリから来ていますか?ジョーダタイム? –

+1

問題に開始日と終了日の両方が含まれていない場合は、1(または必要に応じて2)を追加できませんか? –

答えて

0

ライブラリを使用していない場合、これは方法の1のようになります。

public static Map<TimeUnit,Long> computeDiff(Date date1, Date date2) { 
    long diffInMillies = date2.getTime() - date1.getTime(); 
    List<TimeUnit> units = new ArrayList<TimeUnit>(EnumSet.allOf(TimeUnit.class)); 
    Collections.reverse(units); 
    Map<TimeUnit,Long> result = new LinkedHashMap<TimeUnit,Long>(); 
    long milliesRest = diffInMillies; 
    for (TimeUnit unit : units) { 
     long diff = unit.convert(milliesRest,TimeUnit.MILLISECONDS); 
     long diffInMilliesForUnit = unit.toMillis(diff); 
     milliesRest = milliesRest - diffInMilliesForUnit; 
     result.put(unit,diff); 
    } 
    return result; 
} 

さもないと、あなたがジョダ

+1

Joda-Timeは良い提案ですが、それでも最適なものではありません。 「Joda-Timeは主に「完成」のプロジェクトとみなされます。大幅な拡張は計画されていません。 Java SE 8を使用している場合は、「java.time」(JSR-310)に移行してください。」[Joda-Timeホームページ](http://www.joda.org/joda-time/)から引用してください。 –

+1

いずれにせよ、若い人たちに古くなった古いDateクラスを教えてください。あなたと私の両方が言及したように、今日私たちはずっと優れています。まだJava 8(またはそれ以降)を使用していない場合、私はまだ[The ThreeTen Backport **](http://www.threeten.org/threetenbp/)がJoda-Timeよりも優れていると思います。 –

関連する問題