根据传入的时间,自动计算规则时间(如:包期时段的开始时间和结束时间)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_20086125/article/details/78770748

最近,需要做一个包期和优惠券业务,这就涉及到计算业务时长,这里只是简单的写一个计算业务时间的工具类,广大猿友们自己注意,下面的代码可以直接用,哈哈,分享一下:



 /**
     * @Description: 根据传入的时间返回包期开始时间
     * @
     * @date 2017年10月27日 上午11:02:44
     * @param lastEndDate
     * @return
     */
    public static Date getBagStartDateTime(Date lastEndDate){
   
    Date sDate=null;
    try {
    Date nowDateTime=getSetDate(new Date(),0);//即今天的00:00:00 000
    Date lastDateTime=getSetDate(lastEndDate,0);//用天来做判断,获取某天的00:00:00 000
    Calendar tomDateTime=getBeginTimeCalendar(getSetCalendarDay(Calendar.getInstance(), 1));//即明天的00:00:00 000
Calendar furDateTime=getBeginTimeCalendar(getSetCalendarDay(convertDateToCalendar(lastDateTime), 1));//即今天后的某一天后的后天的00:00:00 000

if((lastDateTime).compareTo(nowDateTime)==1){//如果lastEndDate>今天,startDate=lastEndDate+1零点零分零秒
sDate= furDateTime.getTime();
}else if((lastDateTime).compareTo(nowDateTime)==-1){//如果lastEndDate<今天, startDate=今天零点零分零秒
sDate= nowDateTime;
}else if((lastDateTime).compareTo(nowDateTime)==0){//如果lastEndDate=今天,startDate=明天零点零分零秒
sDate= tomDateTime.getTime();
}
   
} catch (Exception e) {
logger.error("DateUtil::getBagStartDateTime::包期开始时间日期计算异常", e);
}
   
return sDate;
   
    }


 /**
     * @Description: 根据包期开始时间计算包期结束时间
     * @author 
     * @date 2017年10月28日 下午3:28:36
     * @param bagStartDate 
     * @param d
     * @param m
     * @return
     */
    public static Date getBagEndDateTime(Date bagStartDate,int d,Short m){
    Calendar ca= new GregorianCalendar();
    Date dateTime=getSetDate(bagStartDate,0);;//即某天的00:00:00 000
    ca.setTime(dateTime);
    ca.add(Calendar.MONTH,m);//月份加m,得到ca对象的月份+m个月后的月份
ca.add(Calendar.DATE, d);
ca=getEndTimeCalendar(ca);
return ca.getTime();
   
    }


/**
* @Description: 返回清空时间的日期
* @author 
* @date 2017年10月27日 下午2:32:54
* @param d
* @return
*/
public static Date getSetDate(Date dt,int da){
Calendar calendar = new GregorianCalendar();
calendar.setTime(dt);
calendar.add(Calendar.DATE, da); // 将日期中日设为可变化的
calendar.set(Calendar.HOUR_OF_DAY, 0); // 将日期中时设为零
calendar.set(Calendar.MINUTE, 0); // 将日期中分设为零
calendar.set(Calendar.SECOND, 0); // 将日期中秒设为零
calendar.set(Calendar.MILLISECOND, 0); // 将日期中毫秒设为零

return calendar.getTime();
}


/**
* 取指定日期的零点时间
* @author  
* @param calendar 日期对象
* @return 某年某月某日零点的日期对象
*/
public static Calendar getBeginTimeCalendar(Calendar calendar) {
calendar.set(Calendar.HOUR_OF_DAY, 0); // 将日期中时设为零
calendar.set(Calendar.MINUTE, 0); // 将日期中分设为零
calendar.set(Calendar.SECOND, 0); // 将日期中秒设为零
calendar.set(Calendar.MILLISECOND, 0); // 将日期中毫秒设为零
return calendar;
}

/**
* 取指定日期的结束时间
* @author 
* @param calendar 日期对象
* @return 某年某月某日
*/
public static Calendar getEndTimeCalendar(Calendar calendar) {
calendar.set(Calendar.HOUR_OF_DAY, 23); // 将日期中时设为23
calendar.set(Calendar.MINUTE, 59); // 将日期中分设为59
calendar.set(Calendar.SECOND, 59); // 将日期中秒设为59
calendar.set(Calendar.MILLISECOND, 999);// 将日期中毫秒设为999
return calendar;
}


/**
* @Description: 获取Calendar日期数据的某一天
* @author
* @date 2017-8-30 下午7:33:27
* @param ca
* @param d
* @return
*/
public static Calendar getSetCalendarDay(Calendar ca,int d){
ca.add(Calendar.DATE, d);
return ca;
}


/**
* 日期对象相互转换
* @author 
* @param date Date日期对象
* @return 日期对象
*/
public static Calendar convertDateToCalendar(Date date) {
Calendar calendar = new GregorianCalendar();
calendar.setTime(date);
return calendar;
}



如有遗漏,请联系我,哈哈,分享给大家!

猜你喜欢

转载自blog.csdn.net/qq_20086125/article/details/78770748