2016-11-10 64 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

相关问题