在两个不同的时间工作,但在三个不同的时间没有显示正确的计算结果。
import {createBrowserHistory} from 'history';
export const history = createBrowserHistory();
答案 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
使用了不合适的对象。 date1
和date2
被正确定义为Date
对象,因为它们代表一天中的时间(如您在your comment中提到的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);
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;