Java:SimpleDateFormat每天和每小时增加1(时间跨度)

时间:2012-10-09 13:31:49

标签: java time format simpledateformat timespan

我正在尝试以“days:hours:minutes:seconds”格式输出“900,000毫秒”,我现在正在使用此代码:

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd:HH:mm:ss");
String formatted = simpleDateFormat.format(900000)

900,000毫秒应该是15分钟,所以我希望它返回

00:00:15:00

或类似的东西......

但无论如何它会返回

01:01:15:00

有人可以告诉我为什么以及如何解决它?

我认为它必须对时区做一些事情,但它也增加了1天......?

提前致谢!

4 个答案:

答案 0 :(得分:11)

Day是01因为它代表1月1日。小时01可能与您的时区有关。 试试这个:

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd:HH:mm:ss");    
simpleDateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
String formatted = simpleDateFormat.format(900000);

答案 1 :(得分:8)

使用SimpleDateFormat

您的错误

SimpleDateFormat用于获取不计时的DATE实例

您应该使用TimeUnit

这是一个例子

 public static void main(String[] args) throws Exception {
        long millis = 900000;

        String s = String.format("%d min, %d sec",
                TimeUnit.MILLISECONDS.toMinutes(millis),
                TimeUnit.MILLISECONDS.toSeconds(millis)
                - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis)));

        System.out.println(s);


    }

这会让你

15 min, 0 sec

只需格式化您的心脏内容并添加天数和小时数......

答案 2 :(得分:7)

传递给SimpleDateFormat的值900,000是一个时间点... 1970年1月1日15:00,格林尼治标准时间00:00:00或者:

1970年1月1日,格林尼治标准时间00:15:00

在您所在时区的1970年这个日期和时间,这一天是1,小时是1。

答案 3 :(得分:0)

答案是对的。 SimpleDate.format(900000)语句格式化时间900000毫秒,超过纪元,这将是第一个小时的15分钟