java 8小时制_java 计算工作日的。8小时制度

这个Java程序用于计算两个日期间按照8小时工作日制度的总工作天数。它考虑了每天8:30到11:45以及13:15到18:00的工作时间。代码通过处理不同时间段的边界条件来计算实际工作小时并转换为天数。
摘要由CSDN通过智能技术生成

import java.text.DateFormat;

import java.text.ParseException;

import java.text.SimpleDateFormat;

import java.util.Calendar;

import java.util.Date;

public class DayTest {

public static void main(String[]args){

String BeginDate="2014-03-27 13:16:00.000";

String EndDate="2014-03-28 11:46:00.000";

double day = getDay(BeginDate,EndDate);

System.out.println("天数:"+day);

}

private static double getDay(String beginDate, String endDate) {

SimpleDateFormat from = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss"); //这里的格式可以自己设置

//String times = from.format(beginDate);

double JSHH = 0;

double JSDay = 0;

double day = getDD(beginDate,endDate);

System.out.println(day);

if(day<1){

JSHH = getHH(beginDate,endDate);

System.out.println("JSHH = "+JSHH);

if(JSHH%60 != 0){

System.out.println("JSHH/60 = "+JSHH/60);

int a = (int) (JSHH / 60);

System.out.println("a = "+a);

JSHH = a + 0.5;

JSDay = JSHH / 8;

return JSDay;

}else{

JSHH = JSHH / 60 ;

JSDay = JSHH / 8;

return JSDay;

}

}else{

day = getDD(beginDate,endDate);

System.out.println("day:"+day);

JSHH = getHH(getAddDay(beginDate,day),endDate);

System.out.println("JSHH = "+JSHH);

if(JSHH%60 != 0){

System.out.println("JSHH/60 = "+JSHH/60);

int a = (int) (JSHH / 60);

System.out.println("a = "+a);

JSHH = a + 0.5;

}else{

JSHH = JSHH / 60 ;

}

System.out.println("JSHH ="+JSHH);

JSHH = JSHH / 8;

JSDay = day + JSHH;

return JSDay;

}

}

public static double getDD(String time1, String time2){

long quot = 0;

SimpleDateFormat ft = new SimpleDateFormat("yyyy-MM-dd");

try {

Date date1 = ft.parse( time1 );

Date date2 = ft.parse( time2 );

quot = date2.getTime() - date1.getTime();

quot = quot / 1000 / 60 / 60 / 24;

} catch (ParseException e) {

e.printStackTrace();

}

return quot;

}

public static double getHH(String time1, String time2){

long quot = 0;

SimpleDateFormat ft = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss"); //这里的格式可以自己设置

StringBuffer T = new StringBuffer();

T.append(time1.substring(0, 10));

SimpleDateFormat ftHH = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //这里的格式可以自己设置

try {

System.out.println("time1:"+time1);

Date date1 = ft.parse( time1 );

Date date2 = ft.parse( time2 );

Date DateHH1 = ftHH.parse(time1);

Date DateHH2 = ftHH.parse(time2);

System.out.println("DateHH1:"+DateHH1);

System.out.println("DateHH2:"+DateHH2);

if(DateHH1.getTime() >= ftHH.parse(T.toString()+" 8:30:00").getTime() &&

DateHH1.getTime() <= ftHH.parse(T.toString()+" 11:45:00").getTime() &&

DateHH2.getTime() >= ftHH.parse(T.toString()+" 13:15:00").getTime() &&

DateHH2.getTime() <= ftHH.parse(T.toString()+" 18:00:00").getTime()){

System.out.println("执行的是方法一 "+ftHH.parse(T.toString()+" 11:45:00").getTime() +" " + date1.getTime());

quot = ftHH.parse(T.toString()+" 11:45:00").getTime() - date1.getTime()+(date2.getTime()-ftHH.parse(T.toString()+" 13:15:00").getTime());

quot = quot / 1000 / 60 ;

System.out.println("quot = "+quot);

return quot;

}

else if(DateHH1.getTime() >= ftHH.parse(T.toString()+" 8:30:00").getTime() &&

DateHH1.getTime() <= ftHH.parse(T.toString()+" 11:45:00").getTime() &&

DateHH2.getTime() <= ftHH.parse(T.toString()+" 11:45:00").getTime() &&

DateHH2.getTime()>DateHH1.getTime()){

quot = DateHH2.getTime() - date1.getTime();

quot = quot / 1000 / 60 ;

return quot;

}

else if(DateHH1.getTime() >= ftHH.parse(T.toString()+" 13:15:00").getTime() &&

DateHH1.getTime() <= ftHH.parse(T.toString()+" 18:00:00").getTime() &&

DateHH2.getTime() <= ftHH.parse(T.toString()+" 18:00:00").getTime() &&

DateHH2.getTime()>DateHH1.getTime()){

quot = DateHH2.getTime() - date1.getTime();

quot = quot / 1000 / 60 ;

return quot;

}

else if(DateHH1.getTime() >= ftHH.parse(T.toString()+" 13:15:00").getTime() &&

DateHH1.getTime() <= ftHH.parse(T.toString()+" 18:00:00").getTime() &&

DateHH2.getTime() <= ftHH.parse(T.toString()+" 11:45:00").getTime()){

quot = ftHH.parse(T.toString()+" 18:00:00").getTime() - date1.getTime() + (date2.getTime()-ftHH.parse(T.toString()+" 8:30:00").getTime());

if(ftHH.parse(T.toString()+" 13:15:00").getTime() == DateHH1.getTime())

{

quot = 0;

}else{

quot = quot / 1000 / 60;

}

System.out.println("quot = "+ quot);

return quot;

}

} catch (ParseException e) {

e.printStackTrace();

}

return quot;

}

public static String getAddDay(String date, double day) {

SimpleDateFormat from = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss"); //这里的格式可以自己设置

Calendar startDT = Calendar.getInstance();

startDT.setTime(getDate(date));

startDT.add(Calendar.DAY_OF_MONTH,(int) day);

return from.format(startDT.getTime());

}

public static Date getDate(String date){

SimpleDateFormat from = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss"); //这里的格式可以自己设置

long t;

try {

t = from.parse(date).getTime();

Date d = new Date(t);

return d;

} catch (ParseException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return null;

}

}

原文:http://blog.csdn.net/yangying19911113/article/details/24268381

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值