Как конвертировать миллисекунды в часы и дни?

Я хочу получить время запуска и время работы 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, который может преобразовывать миллисекунды?

Ответ 1

В приведенном ниже коде нужна математика и построена результирующая строка:

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());

Ответ 2

Когда у вас есть время в миллисекундах, вы можете использовать перечисление TimeUnit для преобразования его в другие единицы времени. Преобразование в дни просто потребует одного вызова.

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

Получение часов будет включать в себя еще один аналогичный вызов для общего количества часов, а затем вычисление оставшихся часов после того, как дни будут вычтены.

Ответ 3

Взгляните на Pretty Time. Это библиотека для генерации повторяющихся временных строк времени от временных меток, таких как миллисекунды.