Java: SimpleDateFormat在日期和小时上加1 (时间跨度)

6
我正在尝试以“天:小时:分钟:秒”的格式输出“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了...?

提前感谢!


我认为您不能使用“dd”来表示天数,因为一个“d”代表一个月中的某一天。 - gtgaxiola
用d代替dd会得到1而不是01,但不幸的是没有0 :( - Abandoned account
4个回答

12

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

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

非常感谢,这解决了我的问题! :) 有没有什么办法可以修复天数? - Abandoned account

8
您正在使用SimpleDateFormat的方式有误,它只能获取不包括时间部分的日期实例。您应该使用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 分钟,0 秒
只需按照您的喜好进行格式化,并添加天数和小时即可...

7
传递给SimpleDateFormat的值900,000是一个时间点...表示1970年1月1日00:00:00 GMT后15分钟,即:

1970年1月1日00:15:00 GMT

在你的时区,这个日期和时间是1970年1月1日,小时为1。


0

答案是正确的。SimpleDate.format(900000)语句格式化了距离纪元过去900000毫秒的时间,这将是第一小时的15分钟。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接