Java 计算两次之间的毫秒数

Java 计算两次之间的毫秒数,java,algorithm,time,Java,Algorithm,Time,我需要一个计算这些时间之间毫秒数的算法 HH:MM:SS,MS --> HH:MM:SS,MS 00:08:50,800 --> 00:08:55,250 我写了4次java代码,但我认为我不理解这个想法,我搜索了它,但所有的解决方案都使用了库,我不想使用库 这是我编写的java代码,但它没有给我正确的偏移量 private int findOffset(Time t1, Time t2) { int offset = 0; int diffHH

我需要一个计算这些时间之间毫秒数的算法

HH:MM:SS,MS  --> HH:MM:SS,MS

00:08:50,800 --> 00:08:55,250
我写了4次java代码,但我认为我不理解这个想法,我搜索了它,但所有的解决方案都使用了库,我不想使用库

这是我编写的java代码,但它没有给我正确的偏移量

private int findOffset(Time t1, Time t2) {
        int offset = 0;
        int diffHH = (t2.getHH() - t1.getHH());
        int diffMM = (t2.getMM() - t1.getMM());
        int diffSS = (t2.getSS() - t1.getSS());
        int diffMS = (t2.getMS() - t1.getMS());
        if (diffHH != 0) {
            if (diffHH < 0) {
                diffHH = 24 - t1.getHH() + t2.getHH();
            }
            offset += (3600000 * diffHH);
        }

        if (diffMM != 0) {
            if (diffMM < 0) {
                diffMM = 60 - t1.getMM() + t2.getMM();
            }
            offset += (60000 * diffMM);
        }
        if (diffSS != 0) {
            if (diffSS < 0) {
                diffSS = 60 - t1.getSS() + t2.getSS();
            }
            offset += (1000 * diffSS);
        }

        if (diffMS != 0) {

            if (diffMS < 0) {
                diffMS =  t1.getMS() + t2.getMS();
            }

            offset -= diffMS;
        }

        return offset;
    }
private int findOffset(时间t1,时间t2){
int hh1=t1.getHH(),hh2=t2.getHH();
int mm1=t1.getMM(),mm2=t2.getMM();
int ss1=t1.getSS(),ss2=t2.getSS();
int ms1=t1.getMS(),ms2=t2.getMS();
int偏移量=(((hh2-hh1)*60)+(mm2-mm1))*60)+(ss2-ss1))*1000+(ms2-ms1);
如果(偏移量<0)
偏移量+=24*60*60*1000;
返回偏移量;
}
请注意,这始终会给出0到23h 59m 59.999ms范围内的答案。问题没有具体说明两个给定时间的日期;因此,真正的答案可能是+或-N天(其中N可以是任意整数)。

private int findOffset(时间t1,时间t2){
int hh1=t1.getHH(),hh2=t2.getHH();
int mm1=t1.getMM(),mm2=t2.getMM();
int ss1=t1.getSS(),ss2=t2.getSS();
int ms1=t1.getMS(),ms2=t2.getMS();
int偏移量=(((hh2-hh1)*60)+(mm2-mm1))*60)+(ss2-ss1))*1000+(ms2-ms1);
如果(偏移量<0)
偏移量+=24*60*60*1000;
返回偏移量;
}

请注意,这始终会给出0到23h 59m 59.999ms范围内的答案。问题没有具体说明两个给定时间的日期;因此,真正的答案可能是+或-N天(其中N可以是任何整数)。

我们的想法是将时间转换为毫秒,然后返回差值:

private int timeToMs(Time t) {
    return t.getHH() * 60 * 60 * 1000 + t.getMM() * 60 * 1000 + t.getSS() * 1000 + t.getMS();
}

private int findOffset(Time begin, Time end) {
    return timeToMs(end) - timeToMs(begin);
}

编辑:此答案假设给定的时间在同一天。

我们的想法是将时间转换为毫秒,然后返回差值:

private int timeToMs(Time t) {
    return t.getHH() * 60 * 60 * 1000 + t.getMM() * 60 * 1000 + t.getSS() * 1000 + t.getMS();
}

private int findOffset(Time begin, Time end) {
    return timeToMs(end) - timeToMs(begin);
}


编辑:此答案假设给定的时间在同一天。

然后,您应该将代码添加到问题中,即使它似乎不起作用,或者发布时会觉得很愚蠢,但还是要这样做。用Java标记你的问题。只计算毫秒,然后将它们转换成小时、分、秒和毫秒,并在上面打印出来format@yacc我不是要一个代码,我只是想要一个说明或者一个算法来说明如何去做,这样我就可以尝试另一种方法。@LuaiGhunim你不理解我,时间格式是输入,毫秒是输出。然后你应该将你的代码添加到问题中,即使它看起来不起作用,或者你会觉得发帖很愚蠢,但还是要这样做。用Java标记你的问题。只计算毫秒,然后将它们转换成小时、分、秒和毫秒,并在上面打印出来format@yacc我不是要一个代码,我只是想要一个说明或者一个算法来说明如何去做,这样我就可以尝试另一种方法。@LuaiGhunim你不理解我,时间格式是输入,毫秒是输出。这个代码也是正确的,谢谢,但我选择了小代码。这个代码也是正确的,谢谢,但我选择了小代码。如果start=23:55:00.000,end=00:10:00.000,你将以负数结束,而不是15分钟的间隔。是的,但我们怎么知道这两次之间只有一天?这是一个很好的观点。OP没有正确地规定要求。但是如果你走极端,你的答案可能不正确,即使是在10:11:12.345到10:11:13.678之间。它可能是1333毫秒的间隔,但是你怎么知道它不是1天+1333毫秒,或者2天+1333毫秒?哈哈,你也是对的。如果op想要ms的结果,可能是因为开始和结束之间没有太多时间(因此你的第一个评论可能有意义)。@senerh是的,如果开始=23:55:00.000和结束=00:10:00.000,那么你将以负数结束,而不是15分钟的间隔。是的,但我们怎么知道这两次之间只有一天?这是一个很好的观点。OP没有正确地规定要求。但是如果你走极端,你的答案可能不正确,即使是在10:11:12.345到10:11:13.678之间。它可能是1333毫秒的间隔,但是你怎么知道它不是1天+1333毫秒,或者2天+1333毫秒?哈哈,你也是对的。也许如果op想要ms的结果,那是因为从开始到结束之间没有太多时间(所以你的第一个评论是有意义的)。@senerh是的,是在同一天
private int timeToMs(Time t) {
    return t.getHH() * 60 * 60 * 1000 + t.getMM() * 60 * 1000 + t.getSS() * 1000 + t.getMS();
}

private int findOffset(Time begin, Time end) {
    return timeToMs(end) - timeToMs(begin);
}