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

Aba*_*unt 5 java format time timespan simpledateformat

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

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd:HH:mm:ss");
String formatted = simpleDateFormat.format(900000)
Run Code Online (Sandbox Code Playgroud)

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

00:00:15:00
Run Code Online (Sandbox Code Playgroud)

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

但无论如何它都会回归

01:01:15:00
Run Code Online (Sandbox Code Playgroud)

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

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

提前致谢!

Ada*_*yga 11

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

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


gtg*_*ola 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);


    }
Run Code Online (Sandbox Code Playgroud)

这会得到你

15 min, 0 sec

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


Chr*_*ell 7

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

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

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