如何计算三个时间之间的差异?

时间:2018-09-03 13:38:58

标签: java android

在两个不同的时间工作,但在三个不同的时间没有显示正确的计算结果。

import {createBrowserHistory} from 'history';
export const history = createBrowserHistory();


3 个答案:

答案 0 :(得分:3)

您是否要计算:

Work_Duration = End_Time - Start_Time - Break_Duration?

如果是,则可以简单地使用整数/长变量来表示中断持续时间,以您选择的单位(秒或分钟)表示。不必是Date对象。

您可以计算:

Break_Duration = Break_End_Time - Break_Start_Time

因此,您将有2个Date对象(一个用于中断时间,另一个用于中断时间),而不是一个用于中断时间。

答案 1 :(得分:0)

如果您要计算时间结束时间timestart与结束时间之间的差异,则需要执行以下操作:

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)

答案 2 :(得分:0)

此处的关键问题是中断时间的持续时间date3使用了不合适的对象。 date1date2被正确定义为Date对象,因为它们代表一天中的时间(如您在your comment中提到的10:00和05:00)。但是,通过将date3设置为00:30,您就将其声明为等于今天午夜一半的一天中的某个时间,而您希望将其设置为30分钟。

因此,您需要计算date1date2之间的差值,然后从这样的休息时间中减去分钟数(例如,假设breakLength是30分钟):

SimpleDateFormat format = new SimpleDateFormat("hh:mm");
Date date1 = format.parse(timestart);
Date date2 = format.parse(timeend);
long breakLengthMillis = TimeUnit.MINUTES.toMillis(breakLength)

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

或者,如果您想按开始和结束时间来衡量休息时间,则可以使用以下方法:

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;