2016-03-24 9 views
-1

私はjavaを初めて使用しています。私はJavaでの日付の算術に関するわずかな混乱を抱えています。私は2つの日付の間の違いを見つけたいシナリオを、次のようしている: -javaの日付の違いを見つける

java.util.Date objDt1 = getDate1FromSrc1(); // I am obtaining it from src1 
java.util.Date objDt2 = getDate2FromOtherSrc(); // I am getting dt2 by other way. 

は今、私は他の日付オブジェクトでなければなりません二つの日付と出力の違いを見つけたいです。私はいくつかの奇妙な結果を取得しています、

Calendar objCal1  = Calendar.getInstance(); 
Calendar objCal2  = Calendar.getInstance(); 
objCal1.setTime(objDt1); 
objCal2.setTime(objDt2); 

objCal1.add(Calendar.DAY_OF_MONTH, -objCal2.get(Calendar.DAY_OF_MONTH)); 
objCal1.add(Calendar.MONTH,   -objCal2.get(Calendar.MONTH)); 
objCal1.add(Calendar.YEAR,   -objCal2.get(Calendar.YEAR)); 
objCal1.add(Calendar.HOUR_OF_DAY, -objCal2.get(Calendar.HOUR_OF_DAY)); 
objCal1.add(Calendar.MINUTE,  -objCal2.get(Calendar.MINUTE)); 
objCal1.add(Calendar.SECOND,  -objCal2.get(Calendar.SECOND)); 

java.util.Date objDiff = objCal1.getTime(); 

しかし - :

だから、私は次のコードを書かれています。例えば。 objDt1が"02/22/2016 09:00:00"で、objDt2が"02/22/2016 11:00:00"の場合、objDiffが出力として"02:00:00"になると予想していますが、これは私には得られません。

あなたは私がここでやっていることを私に示唆することができますか?そしてこの問題にアプローチする正しい方法は何ですか?

ありがとうございます。次のようにあなたは、単にlongに変換することができ、2つの日付の間の違いを見つけるために

+0

日付の操作は難しいです。年は消えるだけではありません。可能であれば、新しいJava 8の日付クラスで 'Period'を試してください。 –

+0

@EvanKnowles、私はjava 8を使用できません。私はjava7を使用しています。 –

+0

@ user2393267 Java 7の場合は、java.timeの大部分の機能のバックポートである[ThreeTen-Backport](http://www.threeten.org/threetenbp/)プロジェクトを使用できます。同じ人によって建てられました。あるいは、(同じ人によって作られた)java.timeに影響を与えたフレームワークである[Joda-Time](http://www.joda.org/joda-time/)を使ってください。古い日時クラスはとても悪いので、避けてください。 –

答えて

1

java.util.Date objDt1 = getDate1FromSrc1(); 
java.util.Date objDt2 = getDate2FromOtherSrc(); 

long date1 = objDt1.getTime(); 
long date2 = objDt2.getTime(); 
System.out.println("Difference (In Seconds): " + (date2 - date1)/1000); 

あなたはこの差がHH:mm:ss形式でになりたいなら、あなたはこのような何かを行うことができます。

public static void main (String[] args) throws Exception 
{ 
    SimpleDateFormat sf = new SimpleDateFormat("HH:mm:ss"); 
    java.util.Date objDt1 = getDate1FromSrc1(); 
    java.util.Date objDt2 = getDate2FromOtherSrc(); 

    long date1 = objDt1.getTime(); 
    long date2 = objDt2.getTime(); 
    System.out.println("Difference: " + sf.format(new Date((date2 - date1)/1000))); 
} 
+0

私の質問を正しく見てください。私は時間の違いを欲しい。私はミリ秒単位では欲しくない。 –

+0

@ user2393267任意のフォーマットで簡単にフォーマットできます。更新された回答を確認してください。 – user2004685

+0

System.out.println( "差異:" + objFmt11.format(新しい日付(-7200000/1000)));あなたのコードは間違った出力をします。私はここで-2:00:00を出力として期待しています。しかし、それは私に何か厄介なものを与えている。あなたは同じことについて説明することができますか? –

関連する問題