第一种写法:
String offtime = "2018-05-02 00:21:11";
String ontime = "2018-05-01 06:02:01";
long onDutyBack = Timestamp.valueOf(onTime).getTime();
long offDutyBack = Timestamp.valueOf(offtime).getTime();
long days = (offDutyBack-onDutyBack) / (1000 * 60 * 60 * 24);
long hours = ((offDutyBack-onDutyBack)-days*(1000 * 60 * 60 * 24))/(1000* 60 * 60);
第二种写法:(不推荐)
public static long getDaySub(String onTime, String offTime) {
DateFormat df = new SimpleDateFormat("HH:mm:ss");
long diff = 0;
long hours = 0;
try {
Date d1 = df.parse(offTime);
Date d2 = df.parse(onTime);
if (isBetweenDate(offTime, "00:00:00", "05:59:59")) {//判断下班时间是否为零点以后
Date d24 = df.parse("23:59:59");
Date d0 = df.parse("00:00:00");
diff = (d24.getTime() - d2.getTime()) + (d1.getTime()-d0.getTime());//这样得到的差值是微秒级别
} else{
diff = d1.getTime() - d2.getTime();//这样得到的差值是微秒级别
}
long days = diff / (1000 * 60 * 60 * 24);
hours = (diff-days*(1000 * 60 * 60 * 24))/(1000* 60 * 60);
}catch (Exception e) {
e.printStackTrace();
}
return hours;
}
/**
* @Author
* @Description: 比较一个时间是否在两个时间之间
* @Date: 13:37 2018/5/28
*/
public static Boolean isBetweenDate(String offDutyTime, String startOffTime ,String endOffTime) {
Date startOffDate = null;
Date endOffDate = null;
Date checkOffDate = null; //打开时间
try {
startOffDate = new SimpleDateFormat("HH:mm:ss").parse(startOffTime); //开始时间
checkOffDate = new SimpleDateFormat("HH:mm:ss").parse(offDutyTime); //基准时间
endOffDate = new SimpleDateFormat("HH:mm:ss").parse(endOffTime);//结束时间
} catch (ParseException e) {
e.printStackTrace();
}
if (checkOffDate.getTime() == startOffDate.getTime() || checkOffDate.getTime() == endOffDate.getTime()) {
return true;
}
Calendar date = Calendar.getInstance();
date.setTime(checkOffDate);
Calendar begin = Calendar.getInstance();
begin.setTime(startOffDate);
Calendar end = Calendar.getInstance();
end.setTime(endOffDate);
if (date.after(begin) && date.before(end)) {
return true;
} else {
return false;
}
}