2017-02-13 2 views
0

私は日の差分を見つけるためにJavaコードを使用しています。両者の間の日付は、'12/27/16' と'01/01/17'正しい日付が得られない別の日付の日付の差異

コードがあるとしましょう:

SimpleDateFormat format = new SimpleDateFormat("mm/dd/yy"); 

Date d1= format.parse("12/27/16"); 
Date d2=format.parse("01/01/17"); 

long diff = d1.getTime()-d2.getTime(); 
long diffDays= diff/(24*60*60*1000); 

しかし、私は、その後diffDaysを印刷するとき、私は取得しています352日ではなく、6日

あなたが d1を印刷する場合
+0

あなたはd2.getTime 'に基づく差分を計算したい() - d1.getTime()'、その逆ではありません。 – nbokmans

+0

@nbokmans正しい結果が得られる限り、私は大丈夫です。 – Bugasur

答えて

2

、あなたはわかります。

間違いないあなたが入れたものだ
Wed Jan 27 00:12:00 CET 2016 

は、その理由は、あなたのフォーマット文字列が間違っているということです:mは分ではなく、月を意味します。正しい形式は"M/d/y"です。

@nbokmansがすでに述べたように、d1 - d2は後方にあり、である必要があります。

documentation for SimpleDateFormatも参照してください。

+0

大変ありがとうございます。出来た。大文字のMとちょうど変わった – Bugasur

1

@Thomasと@nbokmansが答えたように、日付は間違った方法です(しかし、コードはこれを無視するように簡単に変更できます)。しかし、Javaにはよく知られていない時間と日付を処理するための便利なクラスがたくさんあります。私は、次のいずれかの明示的な計算を置き換えます:

SimpleDateFormat format = new SimpleDateFormat("MM/dd/yy"); 

    Date d1 = format.parse("12/27/16"); 
    Date d2 = format.parse("01/01/17"); 

    long days1 = TimeUnit.MILLISECONDS.toDays(d2.getTime() - d1.getTime()); 
    long days2 = Duration.between(d1.toInstant(), d2.toInstant()).abs().toDays(); 
    long days3 = ChronoUnit.DAYS.between(d1.toInstant(), d2.toInstant()); 
関連する問題