2015-11-17 14 views
11

2つの日付の差を異なる年(秒)で計算したいとします。異なる年の2つの日付の差

public static int dateDifference(Date d1, Date d2){ 
    return (int) (d2.getTime() - d1.getTime()); 
} 

問題は、私はこれらの日付のために、たとえば、これを実行するとことです::

d1 = Tue Nov 17 14:18:20 GMT+01:00 2015 
d2 = Fri Nov 28 15:37:50 GMT+02:00 2016 

私は結果として-169191300を取得し、私はこのようにそれを行います。

しかし年が同じ場合、私は正しい結果を得ます、954959013

ここで何が起こっているのか説明できますか?

+0

時間関連の操作については、Java 8の[joda-time](http://www.joda.org/joda-time/)または 'java.time'を参照することをお勧めします。 – Reactormonk

答えて

15

intの代わりにlongを使用してください。

public static long dateDifference(Date d1, Date d2){ 
    return (d2.getTime() - d1.getTime()); 
} 

getTime()結果が整数よりも大きくすることができるのでlongを返します。 Integer.MAX_VALUEより大きい整数を整数にキャストすると、overflowとなり、値が負になることがあります。

関連する問題