Как конвертировать миллисекунды в часы и дни?
Я хочу получить время запуска и время работы 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. Это библиотека для генерации повторяющихся временных строк времени от временных меток, таких как миллисекунды.