总结java.sql.Time对象

时间:2015-03-17 19:07:10

标签: java datetime time

我有一个时间对象列表(代表歌曲的长度),我想加在一起以获得总时间。

查看java.sql.Time个对象的文档,似乎日期部分应该不受影响,毫秒数将表示自1970年1月1日以来的毫秒数,其值为1970年以前的负值。

我有time格式的时间对象(让我们称之为00:06:25),即6分25秒。 如果我打电话给new Date(time.getTime())我会在1月01日00:06:25获得,这是明智的。 但是,当我只打印getTime()的值时,我得到的值为-3215000,这绝对没有意义,这个值表示时间是在1970年1月1日之前......它不是。 / p>

因此,当我尝试一起添加getTime()的多个调用时(例如00:03:35 / -3385000),我得到一个越来越多的负数(-6600000)。

因此,当我尝试使用该值创建一个新的Time对象时,我得到23:10:00而不是00:09:00。

1 个答案:

答案 0 :(得分:0)

我创建了一个显示以下输出的测试作业:

1 Jan 1970 00:06:25 GMT
1 Jan 1970 00:03:35 GMT
1 Jan 1970 00:03:18 GMT
1 Jan 1970 00:04:22 GMT
1 Jan 1970 00:03:47 GMT
1 Jan 1970 00:00:00 GMT

1 Jan 1970 00:21:27 GMT

最后一次是前6次的总和

诀窍是使用Time的toGMTString()(折旧)方法生成输出字符串。

这是我使用的代码:

package com.ggl.testing;

import java.sql.Time;

public class AddDates implements Runnable {

    private Time[] songLength;

    public AddDates() {
        this.songLength = new Time[6];
        long time = (6L * 60 + 25) * 1000;
        songLength[0] = new Time(time);
        time = (3L * 60 + 35) * 1000;
        songLength[1] = new Time(time);
        time = (3L * 60 + 18) * 1000;
        songLength[2] = new Time(time);
        time = (4L * 60 + 22) * 1000;
        songLength[3] = new Time(time);
        time = (3L * 60 + 47) * 1000;
        songLength[4] = new Time(time);
        time = 0L;
        songLength[5] = new Time(time);
    }

    @Override
    public void run() {
        long sum = 0L;
        for (int i = 0; i < songLength.length; i++) {
            sum += songLength[i].getTime();
            System.out.println(songLength[i].toGMTString());
        }

        Time totalTime = new Time(sum);
        System.out.println(totalTime.toGMTString());
    }

    public static void main(String[] args) {
        new AddDates().run();
    }

}