簡體   English   中英

總結java.sql.Time對象

[英]Summing java.sql.Time objects

我有一個時間對象列表(代表一首歌曲的長度),我想將它們加在一起以獲得總時間。

查看java.sql.Time對象的文檔,似乎日期部分應該保持不變,毫秒數將表示自1970年1月1日以來的毫秒數,其中負值表示1970年前。

我有一個00:06:25格式的Time對象(可以稱其為time ),即6分25秒。 如果我調用new Date(time.getTime())我會得到1月1日星期四00:06:25,這是明智的。 但是,當我簡單地打印getTime()的值時,我得到的值是-3215000,這絕對沒有意義,該值表示時間早於1970年1月1日,而實際上不是。

因此,當我嘗試將多個getTime()調用加在一起(如00:03:35 / -3385000)時,我得到的負數越來越多(-6600000)。

因此,當我嘗試使用該值創建一個新的Time對象時,我得到23:10:00而不是00:09:00。

我創建了一個顯示以下輸出的測試作業:

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

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM