2013-09-26 44 views
0

我正在嘗試生成程序完成作業以在程序執行結束時進行打印所花費的總時間。以下是我正在使用的代碼行來實現此目的。減去兩個長整型值之間的差異一小時

long startTime = System.currentTimeMillis(), endTime; 
//actual programming logic 
endTime = System.currentTimeMillis(); 
System.out.println((new SimpleDateFormat("HH:mm:ss.SSS").format(new Date(endTime).getTime() - new Date(startTime).getTime()))); 

這裏的結果是01:00:00.582代替00:00:00.582。雖然我可以想象,這可能是一個非常普遍面臨的問題,我盡最大努力在網絡上針對此問題搜索最佳關鍵字,但沒有引起我的注意。有人可以對此有所瞭解嗎?

任何反應都是非常重要的。謝謝。

+5

請注意,持續時間/期間不是日期。 –

+0

看起來你應該使用'new Date(endTime - startTime)',即使你繼續使用這種方法... –

+0

@SotiriosDelimanolis但他應該得到基於1970年1月1日0:00的日期所以,1970年1月1日的0:00:00.582) – SJuan76

回答

1

我設法產生了我在找的東西。這裏是它的代碼,如果有人需要它:

static String fn_Z_getTimeDifference(Long startTime, Long endTime) 
{ 
    long processTime = endTime - startTime; 
    long days = processTime/86400000L; 
    processTime -= days * 86400000L; 
    long hours = processTime/3600000L; 
    processTime -= hours * 3600000L; 
    long mins = processTime/60000L; 
    processTime -= mins * 60000L; 
    long seconds = processTime/1000L; 
    processTime -= seconds * 1000L; 
    long milliSeconds = processTime ; 
    return (Long.toString(hours)+ ":" + Long.toString(mins) + ":" + Long.toString(seconds) + ":" + Long.toString(milliSeconds)).toString(); 
} 
0

您正在格式化一個數字,因爲包裝和拆開多頭。

試試這個

).format(new Date(endTime - startTime))); 

或者至少是

").format(new Date(new Date(endTime).getTime() - new Date(startTime).getTime())))); 
+0

我以前嘗試過,但似乎也沒有工作。 – Srii

4

當運行類似於你的代碼代碼:

long startTime = System.currentTimeMillis(), endTime; 
try { Thread.sleep(582); } catch (InterruptedException ignored) {} 
endTime = System.currentTimeMillis(); 
System.out.println((new SimpleDateFormat("HH:mm:ss.SSS").format(
    new Date(endTime).getTime() - new Date(startTime).getTime()))); 

我得到這樣的輸出:

16:00:00.582 

顯示日期顯示的時間段我在(UTC-8):

System.out.println((new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(
    new Date(endTime).getTime() - new Date(startTime).getTime()))); 

輸出:

1969-12-31 16:00:00.582 

您要構建Date的零值是00:00:00 1970年1月1日UTC,但是這是在你自己的當地時區構建的,這似乎是1970年1月1日UTC的1小時。

請勿使用時間間隔構造Date

+0

+1 _Don't使用時間間隔構建日期._ –

+0

@rgettman,謝謝你的提示。這確實有幫助。 – Srii