我想根据相对时间记录某些事件。我不关心当天发生什么事,我只是想知道事件发生在2分13秒和243毫秒之前。假设我有:
long event_ms = [some time in ms since the Epoch];
long now_ms = [current time in ms since the Epoch];
long diff_ms = now_ms - event_ms;
diff_ms包含事件发生的AGO毫秒数。我只是想这次格式化(使用格式HH:mm:ss.SSS)。最简单的方法是什么?谢谢!
答案 0 :(得分:8)
班级TimeUnit包含将毫秒转换为小时,分钟和秒的方法:
String.format("%d min, %d sec",
TimeUnit.MILLISECONDS.toMinutes(millis),
TimeUnit.MILLISECONDS.toSeconds(millis) -
TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis))
);
P.S注意,TimeUnit仅适用于1.5 +
答案 1 :(得分:0)
更简单的方法
String.format("%d min, %d sec, %d ms",
millis/60/1000, millis/1000%60, millis%1000);
答案 2 :(得分:0)
您不需要TimeUnit来执行简单的整数运算,例如除法和模块,也不需要使用TimeZone,因为您正在处理与时区无关的delta。这是我将使用的解决方案:
long millis = 123456L;
String delta = String.format(
"%02d:%02d:%02d.%03d",
(millis / (1000L * 60L * 60L)),
(millis / (1000L * 60L)) % 60,
(millis / 1000L) % 60,
millis % 1000L
);
答案 3 :(得分:-1)
以下代码适用于我:
int diff_ms = 61200;
SimpleDateFormat fmt = new SimpleDateFormat("HH:mm:ss.SSS");
fmt.setTimeZone(TimeZone.getTimeZone("GMT"));
String str = fmt.format(new Date(diff_ms));
System.out.println(str);
打印00:01:01.200
注意设置时区。否则结果取决于您的默认时区,除GMT外,其他地方都会出错。