如何将毫秒转换为小时和天?

15

我想获取JVM的启动时间和运行时间。目前我已经做了这个:

public long getjvmstarttime(){
    final long uptime = ManagementFactory.getRuntimeMXBean().getStartTime();
    return uptime;
}

public long getjvmuptime(){
    final long uptime = ManagementFactory.getRuntimeMXBean().getUptime();
    return uptime;
}

但是我获取到的时间是毫秒。我该如何将时间转换为天数和小时数。我希望以以下格式显示毫秒:3天, 8小时, 32分钟。是否有任何内部的Java方法可以将毫秒转换?

4个回答

61

一旦你有了毫秒级别的时间,你可以使用TimeUnit枚举类型将其转换为其他时间单位。只需要一次调用即可将其转换为天。

long days = TimeUnit.MILLISECONDS.toDays(milliseconds);

获取小时数将涉及到另一个类似的总小时数调用,然后计算减去天数后剩余的小时数。


谢谢,老兄,你真是太棒了。比被接受的答案好多了。 - Marko Niciforovic
最佳答案,仍然是上面的方法以及几乎所有其他方法(如.toHours(millis))都返回长整型值,为什么? - Lampione
@VeenarM 这些解决方案是在同一天提供的,而 TimeUnit 自 Java 5 以来就存在。(DAYS 是在 Java 7 中添加的,这比这些帖子早了一年。) - Bill the Lizard
哦,我的错 - 我只是假设它是新的DateTime组件的一部分 - 那么这真是太棒了,是更好的解决方案 :) - VeenarM

40

下面的代码执行所需的数学运算并构建生成的字符串:

private static final int SECOND = 1000;
private static final int MINUTE = 60 * SECOND;
private static final int HOUR = 60 * MINUTE;
private static final int DAY = 24 * HOUR;

// TODO: this is the value in ms
long ms = 10304004543l;
StringBuffer text = new StringBuffer("");
if (ms > DAY) {
  text.append(ms / DAY).append(" days ");
  ms %= DAY;
}
if (ms > HOUR) {
  text.append(ms / HOUR).append(" hours ");
  ms %= HOUR;
}
if (ms > MINUTE) {
  text.append(ms / MINUTE).append(" minutes ");
  ms %= MINUTE;
}
if (ms > SECOND) {
  text.append(ms / SECOND).append(" seconds ");
  ms %= SECOND;
}
text.append(ms + " ms");
System.out.println(text.toString());

1
你的if语句应该检查ms是否大于或等于DAY/MINUTE/HOUR/SECOND。例如,如果ms = 1000,则显示为0秒。 - MrK

2

看一下 Pretty Time。这是一个用于从毫秒级别的时间戳生成易读时间字符串的库。


1
下面的代码可以干净地完成任务。
package com.company;

import java.util.Scanner;
import java.util.concurrent.TimeUnit;

public class Main {

    public static void main(String[] args) {
        final long milliseconds;
        Scanner in = new Scanner(System.in);

        System.out.println("Enter time in milliseconds: ");
        milliseconds = in.nextLong();

        final long seconds = TimeUnit.MILLISECONDS.toSeconds(milliseconds);

        final long minute = TimeUnit.MILLISECONDS.toMinutes(milliseconds);

        final long hours = TimeUnit.MILLISECONDS.toHours(milliseconds);

        final long days = TimeUnit.MILLISECONDS.toDays(milliseconds);

        if(milliseconds < 1000){
            System.out.println(days +"d:" +hours+"h:" +minute+"m:" +seconds +"s:" +milliseconds +"ms");
        }
        else{
            System.out.println(days +"d:" +hours % 24 +"h:" +minute % 60 +"m:" +seconds % 60 +"s");
        }
    }
}

示例输出

输入时间(以毫秒为单位):12000000

0天: 3小时: 20分钟: 0秒


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接