2012-08-25 17 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

時間が1ミリ秒になると、TimeUnit列挙型を使用して他の時間単位に変換できます。日に変換すると1回の呼び出しで済みます。

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

時間を取得するには、同様の合計時間を呼び出す必要があります。その後、残りの時間を計算してから計算します。

+0

を、あなたは...受け入れ答え –

+0

まだベストの答え、方法上記とはかなりよりもとても良い上司です多くの他のすべての.toHours(ミリ)は長い値を返す、なぜですか? – Matteo

+0

@VeenarMこれらのソリューションは同じ日に提供され、TimeUnitはJava 5以降で使用されています(これらの投稿より1年前のJava 7にはDAYSが追加されています)。 –

2

Pretty Timeをご覧ください。これはミリ秒のようなタイムスタンプから人が手に入れることのできる時間列を生成するためのライブラリです。

関連する問題