【问题标题】:Summing java.sql.Time objects对 java.sql.Time 对象求和
【发布时间】:2015-03-17 19:07:09
【问题描述】:

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

查看java.sql.Time 对象的文档,似乎日期部分应该保持不变,毫秒数将表示自 1970 年 1 月 1 日以来的毫秒数,负值表示 1970 年之前。

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

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

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

【问题讨论】:

  • java.sql.Time 并不适合这个。那是一天中的某个时间。我会在数据库中存储一个整数值 - 例如毫秒数。
  • 如果Time 对象代表宇宙中的时间而不是支持加法的时间量,这听起来对您来说是错误的抽象。 2015 年 4 月 3 日加上 1991 年 9 月 7 日应该是多少?
  • 我完全同意,但它只是一个练习练习的一小部分,它已经被选择使用java.sql.Time,它只是让我烦恼

标签: java datetime time


【解决方案1】:

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

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();
    }

}

【讨论】:

    猜你喜欢
    • 2012-05-21
    • 1970-01-01
    • 2010-09-25
    • 1970-01-01
    • 2020-12-29
    • 2015-11-28
    • 1970-01-01
    • 2022-11-19
    • 2019-09-17
    相关资源
    最近更新 更多