如何计算两个java.sql.Time值之间的差异?

如何计算两个java.sql.Time值之间的差异?,java,mysql,Java,Mysql,我有下面这样的桌子 id | Lunch_Out | After_Lunch_In 01 | 01:15:00 | 02:00:01 我试图用下面的代码找出时差 while(rst.next()) { PrintWriter obj1 = response.getWriter(); obj1.println("while entered"); Time a

我有下面这样的桌子

id | Lunch_Out | After_Lunch_In

01   |  01:15:00   |   02:00:01
我试图用下面的代码找出时差

while(rst.next())
            {
                PrintWriter obj1 = response.getWriter();
                obj1.println("while entered");

                Time a =rst.getTime("Lunch_Out");
                Time b =rst.getTime("After_Lunch_In");

                PrintWriter objt1 = response.getWriter();
                objt1.println("LougOut Time is :"+b);
                PrintWriter objt2 = response.getWriter();
                objt2.println("LogIn Time is :"+a);

//long c = b.getTime() - a.getTime() 

                long c = b.getTime() - a.getTime() / (24 * 60 * 60 * 1000);

                //PrintWriter objtr = response.getWriter();
                //objtr.println("different  is :"+c);

                Time diff = new Time(c);

                PrintWriter objt = response.getWriter();
                objt.println("different  is :"+diff);

            }
输出为:

while entered

LougOut Time is :02:00:02

LogIn Time is :01:15:01

different  is :02:00:02

但是期望的输出是:00:45:01。我哪里出错了?

您正在将
a
b
转换为毫秒(从历元开始),然后得到差值。由于后续行涉及调用,因此不需要像以前那样将时间除以24*60*60*1000,从而将时间缩放为天。仅将
c
值作为毫秒差,然后将其转换为下一行中的时间对象
diff

更新后的代码应该如下所示

long c = b.getTime() - a.getTime();
Time diff = new Time(c);
但是,这将为您提供一个时间对象,该对象具有正确的小时、分钟和秒数,但其日期为1970年1月1日。当你在你的问题中添加了MySQL标签时,我建议你在他的评论中考虑他的建议。
我建议您让MySQL为您计算,作为查询的一部分,比如选择午餐外出、午餐外出后、子时间(午餐外出后、午餐外出)作为午餐持续时间从。。。。有关详细信息,请参阅


您正在将
a
b
转换为毫秒(从历元开始),然后获得差值。由于后续行涉及调用,因此不需要像以前那样将时间除以24*60*60*1000,从而将时间缩放为天。仅将
c
值作为毫秒差,然后将其转换为下一行中的时间对象
diff

更新后的代码应该如下所示

long c = b.getTime() - a.getTime();
Time diff = new Time(c);
但是,这将为您提供一个时间对象,该对象具有正确的小时、分钟和秒数,但其日期为1970年1月1日。当你在你的问题中添加了MySQL标签时,我建议你在他的评论中考虑他的建议。
我建议您让MySQL为您计算,作为查询的一部分,比如选择午餐外出、午餐外出后、子时间(午餐外出后、午餐外出)作为午餐持续时间从。。。。有关详细信息,请参阅



我想你的操作员优先顺序搞错了。难道你不想减去时间,然后调整差额吗?@OldProgrammer对不起,我找不到你!我建议您让MySQL为您计算,作为查询的一部分,类似于
选择午餐外出、午餐后外出、子时间(午餐后外出、午餐后外出)作为午餐持续时间从…
。有关详细信息,请参阅。有关日期比较,请查看JodaTime。它使数据/时间计算变得非常简单……您使用的是什么版本的Java?如果您使用的是Java8,那么就不必使用JodaTime来简化计算。我认为您的运算符优先级有问题。难道你不想减去时间,然后调整差额吗?@OldProgrammer对不起,我找不到你!我建议您让MySQL为您计算,作为查询的一部分,类似于
选择午餐外出、午餐后外出、子时间(午餐后外出、午餐后外出)作为午餐持续时间从…
。有关详细信息,请参阅。有关日期比较,请查看JodaTime。它使数据/时间计算变得非常简单……您使用的是什么版本的Java?如果您使用的是Java 8,那么就不必使用JodaTime来简化计算。不,您的更新代码什么时候更新,我就会得到“different is:06:15:01”的结果。但是@paul的select查询运行良好。但是我正在试着了解我无法通过编码得到结果的原因?我想不出是什么导致了这样的问题。表中的日期字段(数据类型和日期格式)是如何存储的?我认为06:15:01是时区(+06)偏移量。因为时间正在转换为纪元日期。OP应该使用Joda Time或Java 8 Time UTIL或Calendar。这样做是其他库被发明的原因:)不。当你更新代码时,我得到的结果是“不同的是:06:15:01”。但是@paul的选择查询工作正常。但是我试图知道为什么我不能通过编码得到结果?我想不出是什么导致了这样的问题。表中的日期字段(数据类型和日期格式)是如何存储的?我认为06:15:01是时区(+06)偏移量。因为时间正在转换为纪元日期。OP应该使用Joda Time或Java 8 Time UTIL或Calendar。这样做是其他库被发明的原因:)