Java 将小时和分钟转换为毫秒,并返回为HH:mm:ss格式

Java 将小时和分钟转换为毫秒,并返回为HH:mm:ss格式,java,datetime,time,Java,Datetime,Time,使用时间单位我想用以下代码将小时和分钟转换为毫秒: int hours = 01, minutes = 0; long milliseconds = TimeUnit.SECONDS.toMillis(TimeUnit.HOURS.toSeconds(hours) + TimeUnit.MINUTES.toSeconds(minutes)); 在3600000毫秒时工作正常 并使用SimpleDateFormat返回到HH:mm:ss格式: SimpleDateFormat formatte

使用
时间单位
我想用以下代码将
小时
分钟
转换为
毫秒

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
输出

更新:

实际上,我正在使用上面的代码使用
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);
}

这是因为你的时区不同。通过设定时区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);

我正期待着呢。
3600000
是一个持续时间(1小时,单位为毫秒),它不是自unix时代开始以来的毫秒数。这就是
newdate()
所期望的。可能还有一些很好的时间分区。如果你已经有小时和分钟的值,为什么不自己格式化呢?类似于
String.format(“%02d:%02d”,小时,分钟)
。还请注意,
hours=01,
是八进制表示法,即不能写入
08
等。