- - PR -
二つのjava.util.Dateの時間差を”HH:mm:ss”形式で求めたい
1
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2004-05-11 17:11
こんにちは。
下記のロジックで二つのDateの時間差を”HH:mm:ss”形式で求めたいのですが 実行結果は 経過時間:09:01:30 となってしまいます。 (期待する結果は、00:01:30 ) 対処法をご存知でしたら宜しくお願いします sample_1.java ----------------------------------------------------------------------- import java.util.*; import java.text.*; /** * * * @author * * To change the template for this generated type comment go to * Window>Preferences>Java>Code Generation>Code and Comments */ public class sample_1 { public static void main(String[] args) throws Exception { SimpleDateFormat formatter = new SimpleDateFormat ("yy/MM/dd HH:mm:ss"); Date startDate = formatter.parse("04/05/11 17:00:00"); // 開始時刻 Date endDate = formatter.parse("04/05/11 17:01:30"); // 終了時刻 long diffTime = endDate.getTime() - startDate.getTime(); // 結果出力用フォーマット SimpleDateFormat timeFormatter = new SimpleDateFormat ("HH:mm:ss"); String diffTimeStr = timeFormatter.format(new Date(diffTime)); System.out.println("経過時間:" + diffTimeStr); } } ----------------------------------------------------------------------- | ||||
|
投稿日時: 2004-05-11 17:47
原因はなぜかというと、DateやDateFormatは時間ではなく、 時刻を扱うためのクラスだからです。 年月日も表示すればわかりますが、この場合、 GMTでの「1970/01/01 00:01:30」になってるわけです。 9時間は、日本標準時との時差なんですね。 ロジックとしては、diffTimeを、順番に60や24で割って、商と剰余を求めていくのが正しいかと。 あるいは、SimpleDateFormatのインスタンスを生成するときに、 コンストラクタに英国のLocaleを与えれば、所定の目的は達せるんではないでしょうか。 | ||||
|
投稿日時: 2004-05-11 18:04
原因はEdossonさんのとおりなんで
後はタイムゾーンをGMTとすればずれは直ります。 SimpleDateFormat の次に下記追加してみて下さい。 timeFormatter.setTimeZone(TimeZone.getTimeZone("GMT")); 後、SimpleDateFormat timeFormatter = new SimpleDateFormat ("HH:mm:ss Z"); でタイムゾーンを表示すればずれがはっきりわかりますね。 [ メッセージ編集済み 編集者: いっきゅう 編集日時 2004-05-11 18:08 ] | ||||
|
投稿日時: 2004-05-11 18:45
返信ありがとうございました。
timeFormatter.setTimeZone(TimeZone.getTimeZone("GMT")); を追加することで目的の動作を確認できました。 ただ、日をまたぐ場合の計算がうまくいかないので、 おっしゃるとおりdiffTimeを、順番に60や24割る方法を 使うのが正しいようです。 | ||||
1
