在Java中格式化*相对*时间(ms)?

时间:2011-11-29 14:08:14

标签: java

我想根据相对时间记录某些事件。我不关心当天发生什么事,我只是想知道事件发生在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)。最简单的方法是什么?谢谢!

4 个答案:

答案 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外,其他地方都会出错。