2017-09-08 90 views
0

我有一個很長的變量,表示應用程序的停機時間,以秒爲單位。我想要顯示的停機時間HH:mm:ss問題將秒轉換爲HH:MM:SS java

Long downTime = 755; 
Date newD = new Date(downTime * 1000); 

當通過長變量,我乘它1000得到毫秒值的日期。該newD變量計算Thu Jan 01 01:12:35 GMT 1970

newD值是關閉1小時755秒= 0點12分35秒

這是我的理解是秒* 1000 =毫秒將評估爲正確答案。由於I seen here

如果我使用持續時間,我們會得到正確的答案。

Duration d = Duration.ofSeconds(downTime); 
PT12M35S 

但格式不符合我的要求。

+2

看看這裏如何格式化時間:https://stackoverflow.com/questions/266825/how-to-format-a-duration-in -java-EG-格式hmmss。 – aUserHimself

+3

如果您使用的是UTC,那麼您的當前代碼將會工作,您的本地時區必須比UTC早一個小時。 –

+4

另外,如果您有權訪問Duration類,則表示您正在使用Java 8.因此,不要再使用舊的Date類。使用java.time包中的類。 –

回答

3

LocalTime.MIN

LocalTime.MIN.plusSeconds(755L) 

或者,

LocalTime.MIN.plus( 
    Duration.ofSeconds(755L) 
) 

警告:這是一個黑客,我不建議這樣做。將時間跨度表示爲時間是不明確和令人困惑的。

默認情況下,LocalTime::toString方法省略尾隨單位(如果爲零)。要強制全部三個部分(小時,分鐘,秒),請使用DateTimeFormatter

DateTimeFormatter f = DateTimeFormatter.ofPattern("HH:mm:ss") ; 
String output = lt.format(f) ; 

看到這個code run live at IdeOne.com

0點12分35秒

ISO 8601

我建議,如果可能的話,訓練你的用戶在標準ISO 8601格式。這種格式是實用的,清晰的,毫不含糊的。標準格式在java.time類中默認用於解析/生成字符串。

PT12M35S

或生成的字符串散文拼寫出的時間量。

+2

我同意這個黑客可能會令人困惑。 「持續時間」存在(並且由OP知道)表示持續時間...使用它作爲解決方案。 – AxelH

1

檢查,如果你可以使用這個:

long millis = 755000; 
String hms = String.format("%02d:%02d:%02d", 
    TimeUnit.MILLISECONDS.toHours(millis), 
    TimeUnit.MILLISECONDS.toMinutes(millis) % TimeUnit.HOURS.toMinutes(1), 
    TimeUnit.MILLISECONDS.toSeconds(millis) % TimeUnit.MINUTES.toSeconds(1)); 
System.out.println(hms); 
相關問題