第一种写法:
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; } }