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 小时不应该在那里,并且格式是 3 位小数,而不是我认为我指定的两位。

非常感谢你!

4

1 回答 1

0

您的日期是纪元 + 游戏时间。我认为您正在经历夏令时,因为您所在位置的当前 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 回答