timeutil.java

来自「公司自己开发的工作流引擎」· Java 代码 · 共 209 行

JAVA
209
字号
package cn.com.iaspec.workflow.util;

import cn.com.iaspec.workflow.db.WorkflowDBConnectionManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.sql.CallableStatement;
import java.util.List;
import java.sql.Connection;
import cn.com.iaspec.workflow.privilege.dao.LoginDAO;
import org.apache.log4j.Logger;
import java.sql.Timestamp;
import cn.com.iaspec.workflow.WorkflowConstant;

/**
 * <p>Title:时间转换实用类</p>
 *
 * <p>Description: </p>
 *
 * <p>Copyright: Copyright (c) 2006</p>
 *
 * <p>Company: iASPEC Technologies</p>
 *
 * @author xiesonglin
 * @version 1.5
 */
public class TimeUtil{
  private static Logger logger=Logger.getLogger(TimeUtil.class);
  public TimeUtil(){
  }

  /**
   * 取得开始时间与结束时间的自然日时间间隔
   * @param startDate 开始时间
   * @param endDate 结束日期
   * @return 返回@start_date到@cur_date时间段内的自然日时间间隔(单位为毫秒)
   */
  public long getNaturedayPassTime(java.util.Date startDate,
      java.util.Date endDate){
    Connection conn=null;
    long passTime=0;
    CallableStatement callStm=null;
    try{
      //取得有权限的功能接点id
      conn=WorkflowDBConnectionManager.getInstance().getConnection();
      String sql="{?=call F_GET_NATURE_DAY_UPDATE_TIME(?,?)}";
      callStm=conn.prepareCall(sql);
      callStm.registerOutParameter(1,java.sql.Types.INTEGER);
      callStm.setTimestamp(2,
          startDate==null?null:new Timestamp(startDate.getTime()));
      callStm.setTimestamp(3,endDate==null?null:new Timestamp(endDate.getTime()));
      callStm.execute();
      passTime=callStm.getLong(1);
      callStm.close();
    }
    catch(Exception ex){
      ex.printStackTrace();
    }
    finally{
      WorkflowDBConnectionManager.getInstance().close(conn);
    }
    return passTime;
  }

  /**
   * 取得开始时间与结束时间的工作日时间间隔
   * @param startDate 开始时间
   * @param endDate 结束日期
   * @return 返回@start_date到@cur_date时间段内的工作日时间间隔(单位为毫秒)
   */
  public long getWorkdayPassTime(java.util.Date startDate,
      java.util.Date endDate){
    Connection conn=null;
    long passTime=0;
    CallableStatement callStm=null;
    try{
      //取得有权限的功能接点id
      conn=WorkflowDBConnectionManager.getInstance().getConnection();
      String sql="{?=call F_GET_WORK_DAY_UPDATE_TIME(?,?)}";
      callStm=conn.prepareCall(sql);
      callStm.registerOutParameter(1,java.sql.Types.INTEGER);
      callStm.setTimestamp(2,
          startDate==null?null:new Timestamp(startDate.getTime()));
      callStm.setTimestamp(3,endDate==null?null:new Timestamp(endDate.getTime()));
      callStm.execute();
      passTime=callStm.getLong(1);
      callStm.close();
    }
    catch(Exception ex){
      ex.printStackTrace();
    }
    finally{
      WorkflowDBConnectionManager.getInstance().close(conn);
    }
    return passTime;
  }

  /**
   *取得预期的时间
   * @srcDate 指定的时间
   *@ pastime 时间段,未经过转换的时间
   *@ timeUnitType 时间单位
   *@return 预期的时间
   */
  public java.util.Date getAnticipateDate(java.util.Date srcDate,
      double passTime,String timeUnitType){
    long pass=0;
    java.util.Date date=null;
    if(timeUnitType!=null){
      //自然日
      if(timeUnitType.toUpperCase().equals(WorkflowConstant.
          TIMEUNIT_TYPE_NATUREDAY)){
        pass=this.getNatureday(passTime);
        date=getNaturedayAnticipateDate(srcDate,pass);
      }
      //工作日
      else if(timeUnitType.toUpperCase().equals(WorkflowConstant.
          TIMEUNIT_TYPE_WORKDAY)){
        pass=this.getWorkday(passTime);
        date=getWorkdayAnticipateDate(srcDate,pass);
      }
    }
    return date;
  }

  /**
   * 取得自然日预期的时间
   * @param srcDate 指定的时间
   * @param passTime 时间段,单位为毫秒
   * @return 预期的时间
   */
  public java.util.Date getNaturedayAnticipateDate(java.util.Date srcDate,
      long passTime){
    Connection conn=null;
    java.util.Date date=null;
    CallableStatement callStm=null;
    try{
      //取得有权限的功能接点id
      conn=WorkflowDBConnectionManager.getInstance().getConnection();
      String sql="{?=call F_GET_NATUREDAY_PASS_DATE(?,?)}";
      callStm=conn.prepareCall(sql);
      callStm.registerOutParameter(1,java.sql.Types.TIMESTAMP);
      callStm.setTimestamp(2,srcDate==null?null:new Timestamp(srcDate.getTime()));
      callStm.setLong(3,passTime);
      callStm.execute();
      date=callStm.getTimestamp(1);
      callStm.close();
    }
    catch(Exception ex){
      ex.printStackTrace();
    }
    finally{
      WorkflowDBConnectionManager.getInstance().close(conn);
    }
    return date;
  }

  /**
   * 取得工作日预期的时间
   * @param srcDate 指定的时间
   * @param passTime 时间段,单位为毫秒
   * @return 预期的时间
   */
  public java.util.Date getWorkdayAnticipateDate(java.util.Date srcDate,
      long passTime){
    Connection conn=null;
    java.util.Date date=null;
    CallableStatement callStm=null;
    try{
      //取得有权限的功能接点id
      conn=WorkflowDBConnectionManager.getInstance().getConnection();
      String sql="{?=call F_GET_WORKDAY_PASS_DATE(?,?)}";
      callStm=conn.prepareCall(sql);
      callStm.registerOutParameter(1,java.sql.Types.TIMESTAMP);
      callStm.setTimestamp(2,srcDate==null?null:new Timestamp(srcDate.getTime()));
      callStm.setLong(3,passTime);
      callStm.execute();
      date=callStm.getTimestamp(1);
      callStm.close();
    }
    catch(Exception ex){
      ex.printStackTrace();
    }
    finally{
      WorkflowDBConnectionManager.getInstance().close(conn);
    }
    return date;
  }

  /**
   * 取得自然日转换时间
   * @param date 未经转换的时间
   * @return 取得自然日,单位为毫秒
   */
  public long getNatureday(double date){
    return Math.round(date*24*60*60*1000);
  }

  /**
   * 取得工作日转换时间
   * @param date 未经转换的时间
   * @return 取得工作日,单位为毫秒
   */
  public long getWorkday(double date){
    return Math.round(date*WorkflowConstant.HOURS_PER_WORKDAY*60*60*1000);
  }

}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?