0

2時間の差があるとしましょう

java.text.DateFormat f = new java.text.SimpleDateFormat("HH:mm");
java.util.Date checkIn = f.parse("00:00");
java.util.Date checkOut = f.parse("05:00");

Long timeDifference = new Long(checkOut.getTime() - checkIn.getTime());

"timeDifference" を 3600000 (ミリ秒単位で 1 時間) で割ると、この間隔が何時間になるかがわかります。正しい結果は 5 です。

しかし、「timeDifference」を次のように変換しようとすると:

Calendar cal = new GregorianCalendar();
cal.setTime(new Date(timeDifference));
DateFormat formatter = new SimpleDateFormat("HH:mm");
formatter.format(cal.getTime());

「02:00」と表示されます...なぜですか?「timeDifference」をフォーマットするにはどうすればよいですか?

編集:日付はあまり気にしません。HH:mm のような時間形式で、checkIn と checkOut の違いを知りたいだけです。

4

4 に答える 4

0

「02:00」と表示されます...なぜですか?「timeDifference」をフォーマットするにはどうすればよいですか?

これらのクラスを多少誤用しています。私の推測では、あなたは 1970 年に GMT+3 だったモスクワのタイム ゾーンにいると思います。

簡単な答えは、このような日付を処理する JoaTime を使用するか、ほぼ同じ量のコードになる独自のパーサーとフォーマッターを作成することです。

于 2013-05-13T13:06:20.247 に答える
0

cal.setTime(new Date(timeDifference)):ここで行っているのは、時間をtimeDifference1970 年 1 月 1 日 GMT から (18000000) ミリ秒後に設定することです。(日付と時刻を表示するように SimpleDateFormat を変更した場合、これは明らかです)。1970 年 1 月 1 日の午前 0 時 (GMT) から 18000000 ミリ秒後のタイム ゾーンであるため、02:00 を取得しています。コードを (カリフォルニアで) 実行すると、21:00 になります。あなたより4時間遅れています。

Calendar クラスの仕組みを誤解しているようです。こちらのドキュメントを参照してください。それを超えて、あなたの質問は、あなたが何を達成しようとしているのかを明確にしません。Calendar をよりよく理解することで、これを自分で理解できるようになることを願っています。そうでない場合は、質問を編集して、必要な日付を正確にお知らせください。

于 2013-05-13T13:06:34.207 に答える