问题描述
现有一个表aaaa 其中e是起始时间(包含日期) f 是终止时间(包含日期)要求 求出从起始时间到终止时间具体是多长时间,具体到小时,下班时间不包括在内,每天8:30上班,18点下班,多谢! 处理时长:关闭时间-发起时间(只计营业时间:8:30-18:00),单位:小时;7.5小时工作时长,中午2小时的休息时间12:00到14:00 。如: 发起时间:2012-12-13 15:40 关闭时间:2012-12-16 15:30发起时间:2012-12-13 15:40 -- 13号处理时长=15:40 - 8:30 - 2小时(中午午休) 关闭时间:2012-12-16 15:30 -- 16号处理时长=15:30 - 8:30 - 2小时(中午午休) 总时长=5.1小时 + 2*7.5(14,15号处理时长) + 5小时 求一个通用的处理方法
解决方案
import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;public class DateDeltaDemo {/** * @param args * @throws ParseException */public static void main(String[] args) throws ParseException {// TODO Auto-generated method stubString from="2012-12-13 15:40";String to="2012-12-16 15:30";calSub(from,to);}@SuppressWarnings("deprecation")public static void calSub(String from,String to) throws ParseException{ SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm"); Date to1 = df.parse(to); Date from1=df.parse(from); long l=to1.getTime()-from1.getTime(); long day=l/(24*60*60*1000); long hour=(l/(60*60*1000)-day*24); long min=((l/(60*1000))-day*24*60-hour*60); System.out.println(""+day+"天"+hour+"小时"+min+"分"); double sum=day*7.5; System.out.println(sum); Date t1=new Date(from1.getYear(), from1.getMonth(), from1.getDate(),18, 00); Date t2=new Date(to1.getYear(), to1.getMonth(), to1.getDate(),8, 30); System.out.println(t1); System.out.println(t2); double temphour=0; System.out.println(from1.getHours()); if(from1.getHours()>=14){ temphour=(t1.getTime()-from1.getTime())*1.0/(60*60*1000); }else{ temphour=(t1.getTime()-from1.getTime())*1.0/(60*60*1000)-2; } double temphour1=0; if(to1.getHours()<=12){ temphour1=(to1.getTime()-t2.getTime())*1.0/(60*60*1000); }else{ temphour1=(to1.getTime()-t2.getTime())*1.0/(60*60*1000)-2; } System.out.println(temphour+" "+temphour1); System.out.println("总时间为:"+sum+temphour+temphour1);}}