Java 如何计算三次之间的差异?

Java 如何计算三次之间的差异?,java,android,Java,Android,在两个不同的时间工作,但在三个不同的时间未显示正确的计算 SimpleDateFormat format = new SimpleDateFormat("hh:mm"); Date date1 = format.parse(timestart); Date date2 = format.parse(timeend); Date date3 = format.parse(breaktime); long mills = date2.getTime() - date1.getTime() - dat

在两个不同的时间工作,但在三个不同的时间未显示正确的计算

SimpleDateFormat format = new SimpleDateFormat("hh:mm");
Date date1 = format.parse(timestart);
Date date2 = format.parse(timeend);
Date date3 = format.parse(breaktime);
long mills = date2.getTime() - date1.getTime() - date3.getTime();
int hours = (int)(mills/(1000 * 60 * 60));
int mins = (int) mills/(1000*60) %60;


您是否试图计算:

Work_Duration = End_Time - Start_Time - Break_Duration?
Break_Duration = Break_End_Time - Break_Start_Time
如果是,您可以简单地使用整数/长变量以您选择的单位(秒或分钟)表示中断持续时间。它不必是日期对象

您可以计算:

Work_Duration = End_Time - Start_Time - Break_Duration?
Break_Duration = Break_End_Time - Break_Start_Time

因此,您将有2个
Date
对象(一个用于开始休息时间,另一个用于结束休息时间),而不仅仅是一个用于休息时间。

如果您想计算所需的不同时间结束时间开始和不同时间结束时间休息时间,请执行以下操作:

SimpleDateFormat format = new SimpleDateFormat("hh:mm");
Date date1 = format.parse(timestart);
Date date2 = format.parse(timeend);
Date date3 = format.parse(breaktime);
long mills = date2.getTime() - date1.getTime();
long mills2 = date2.getTime() - date3.getTime();
int hours = (int)(mills/(1000 * 60 * 60));
int mins = (int) mills/(1000*60);
int hours2 = (int)(mills/(1000 * 60 * 60));
int mins2 = (int) mills/(1000*60);

因为如果你使用date1-date2-date3,你会得到一个负数(es 1535983083-1535810283-1535896683)

这里的关键问题是,
date3
,中断时间的持续时间,正在使用一个不合适的对象
date1
date2
被正确定义为
Date
对象,因为它们代表一天中的时间(10:00和05:00,如中所述)。但是,通过将
date3
设置为00:30,您将其声明为一天中的某个时间,相当于今天的午夜半钟,而您希望该时间段为30分钟

因此,您需要计算
date1
date2
之间的差值,然后像这样从中断中减去分钟数(例如假设
breakLength
为30分钟):

或者,如果要通过开始和结束时间来测量中断,可以使用以下方法:

SimpleDateFormat format = new SimpleDateFormat("hh:mm");
Date date1 = format.parse(timestart);
Date date2 = format.parse(timeend);
Date date3 = format.parse(breakStart);       // Start time of break
Date date4 = format.parse(breakEnd);         // End time of break

long mills = date2.getTime() - date1.getTime() - (date4.getTime() - date3.getTime());
int hours = (int)(mills/(1000 * 60 * 60));
int mins = (int) mills/(1000*60) % 60;

你期望什么样的产出?请编辑您的问题以添加一个具体示例(例如,如果
date1
是08:00,
date2
是09:00,
date3
是11:00,那么预期的输出是什么?)您试图计算的差异是什么?您只能在两个单独的点之间进行计算,例如
date1->date2
date1->date3
?或者两个不同点,例如
date1--(diff1)-->date2--(diff2)-->date3
date1->10:00
date2->17:00
date3->00:30
==输出应该是06:30(date2-date1-date3)。您正在使用不合适的对象来测量休息时间。Vivek的回答是一个正确的总结,我还用两个代码解决方案来回答。