2016-11-10 60 views
0

使用TimeUnit我想轉換HoursMinutesMilliseconds與下面的代碼:轉換小時和分鐘成毫秒,並返回到HH:mm:ss格式

int hours = 01, minutes = 0; 
long milliseconds = TimeUnit.SECONDS.toMillis(TimeUnit.HOURS.toSeconds(hours) + TimeUnit.MINUTES.toSeconds(minutes)); 

正常工作與3600000毫秒

並用SimpleDateFormat返回HH:mm:ss格式:

SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss"); 
Date date = new Date(milliseconds); 
String returnFormat = formatter.format(date); //Final Result. 

,這給我的結果是09:59:59這不是預期的輸出。

我很困惑,上面的代碼有什麼問題?我期待輸出01:00:00

UPDATE:

其實我使用上面的代碼創建一個使用Handler post.delayed功能簡單的倒數計時器。

... 
@Override 
public void run() { 
    milliseconds -= 1000; //Remove 1 Seconds 
    handler.postDelayed(this,1000); //Delay in 1 Seconds 
    SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss"); //Create Time Formatting 
    Date date = new Date(milliseconds); //Put the milliseconds into Format 
    String returnFormat = formatter.format(date)); 
    Log.w("COUNTDOWN", returnFormat); 
} 
+4

我期待着那個。 '3600000'是一個持續時間(1小時以毫秒計),它不是自Unix時代開始以來的毫秒數。這是'new Date()'期望的。也有一些很好的時間分區可能涉及。 –

+0

如果你已經有小時和分鐘的值,爲什麼不自己格式化呢?類似於String.format(「%02d:%02d」,小時,分鐘)''。還要注意'hours = 01,'是八進制符號,也就是說你不能寫'08'等。 – Thomas

回答

0

發生這種情況是因爲您的時區不同。通過設定GMT時區,您將能夠獲得預期的結果。使用下面的代碼片段。

SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss"); 
Date date = new Date(milliseconds); 
formatter.setTimeZone(TimeZone.getTimeZone("GMT")); 
String returnFormat = formatter.format(date); //Final Result. 
System.out.println(returnFormat); 
+0

謝謝這個作品! – Polar