1

誰かが助けてくれることを願っています。ゲームの開始から時間を計って今回は表示するタイマーを設定しようとしています。問題は、コードの次のセクションで間違った時間が表示されることです。形式が間違っていて、1 時間遅れています。

private long startTime;
private SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm:ss.SS");

//Constructor:
startTime = System.currentTimeMillis();

public String getTime() {
long gameTime = System.currentTimeMillis() - startTime;
final Date date = new Date(gameTime);
return timeFormat.format(date);
}

一貫して 01:00:03:203 の出力が得られます。秒は正しいですが、1 時間はそこにあるべきではありません。フォーマットは、私が指定したと思っていた 2 桁ではなく、3 桁です。

どうもありがとうございました!

4

1 に答える 1

0

あなたの日付はエポック + gameTime です。今日のあなたの場所の現在の DST がエポックの DST と一致しないため、夏時間のシフトが発生していると思います。

日付の代わりにカレンダーを使用します。今日から始めて、時、分などの部分を明示的に消去します。

Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 3600000 + 60000 + 1000 + 1);

SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm:ss.SS");

System.out.println(timeFormat.format(cal.getTime()));

上記の出力は次のとおりです。 01:01:01.01

http://ideone.com/DyQcl

上記の数字を代入gameTimeすれば完了です。

もちろん、ミリ秒のティックが日の境界を超えると、これは機能しない場合があります。

于 2012-04-24T15:57:21.297 に答える