2012-08-25 49 views
13

我想獲得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方法?

回答

36

下面的代碼確實需要,並建立生成的字符串數學:

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

迷人的解決方案 –

+1

你的if語句應該檢查ms是大於還是等於DAY/MINUTE/HOUR/SECOND。例如,如果ms = 1000,它將顯示爲0秒。 – MrK

44

一旦你有時間毫秒,你可以使用TimeUnit枚舉將其轉換爲其他時間單位。轉換爲日期只需要一個電話。

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

獲得小時數將涉及另一個類似的總小時數的呼叫,然後計算出減去數天後的剩餘小時數。

+0

謝謝老兄,你是老闆..這麼多比接受的答案 –

+0

最好的答案,還是上面的方法和漂亮的更好很多其他人都喜歡.toHours(millis)返回一個很長的價值,爲什麼? – Matteo

+0

@VeenarM這些解決方案是在同一天提供的,而TimeUnit自Java 5以來一直存在。(DAYS已添加到Java 7中,這將在這些帖子的前一年發佈)。 –