最近做一个酒店项目,需求中对时间的操作比较多.如操作未来N天的房间预约情况,时间为今凌晨六点到明日凌晨五点五十九分五十九秒算一天.
我的思路是把查询天数的时间段按照开始到结束划分..
比如 2019-07-07 06:00:00 2019-07-08 05:59:59
2019-087-08 06:00:00 2019-07-09 05:59:59
/**
* 获取未来十五天的时间
*
* @param date
* @return
*/
public List<Time> timeDate(Date date) {
List<Time> list = new ArrayList<Time>();
//当天凌晨六点
Date da = quDate(6, 0, 0);
//当天凌晨5点59分59秒
Date dat = quDate(5, 59, 59);
//从当天开始的下一天开始时间
Date dd = lDate(da, 0);
//从当天开始的下一天结束时间
Date d = lDate(dat, 0);
//从明天开始的下一天开始时间
Date dad = lDate(da, 1);
//从明天开始的下一天结束时间
Date dadd = lDate(dat, 1);
//判断当前时间是否在凌晨零点到凌晨六点之间
//如果是那么获取今天6点后开始的之后的十五天的时间段
if (belongCalendar(date, quDate(0, 0, 0), quDate(05, 59, 59))) {
System.err.println("start if");
for (int i = 0; i < 15; i++) {
Time time = new Time();
time.setStartTime(lDate(dd, i));
//System.err.println(lDate(dd, i));
//System.err.println(lDate(d, i+1));
time.setEndTime(lDate(d, i + 1));
list.add(time);
}
//如果不是那么获取明天开始后6点之后的十五天的时间段
} else {
System.err.println("start else");
for (int i = 0; i < 15; i++) {
Time time = new Time();
time.setStartTime(lDate(dad, i));
//System.err.println(lDate(dad, i));
//System.err.println(lDate(dadd, i+1));
time.setEndTime(lDate(dadd, i + 1));
list.add(time);
}
}
return list;
}
/**
* 判断时间是否在某一区间内
*
* @param nowTime
* @param beginTime
* @param endTime
* @return
*/
public static boolean belongCalendar(Date nowTime, Date beginTime, Date endTime) {
Calendar date = Calendar.getInstance();
date.setTime(nowTime);
Calendar begin = Calendar.getInstance();
begin.setTime(beginTime);
Calendar end = Calendar.getInstance();
end.setTime(endTime);
if (date.after(begin) && date.before(end)) {
return true;
} else {
return false;
}
}
/**
* 获取今天某一时间
*
* @param i
* @return
*/
public Date quDate(Integer i, Integer i2, Integer i3) {
Calendar c = Calendar.getInstance();
c.set(Calendar.HOUR_OF_DAY, i);
c.set(Calendar.MINUTE, i2);
c.set(Calendar.SECOND, i3);
Date m6 = c.getTime();
//System.out.println(m6);
return m6;
}
/**
* 获取未来i天这个时间
*
* @param date
* @return
*/
public Date lDate(Date date, Integer i) {
Calendar calendar = new GregorianCalendar();
calendar.setTime(date);
calendar.add(calendar.DATE, i);//把日期往后增加一天.整数往后推,负数往前移动
date = calendar.getTime(); //这个时间就是日期往后推一天的结果
return date;
}
原文:https://www.cnblogs.com/wwwbin/p/11227615.html