package com.mossle.workcal.support;
import java.util.Calendar;
import java.util.Date;
public class DayPart {
private WorkDay workDay;
private int index;
private int fromHour;
private int fromMinute;
private int toHour;
private int toMinute;
public Date add(Date date, long millis) {
Date end = null;
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
// 计算当前时间的小时和分钟
int hour = calendar.get(Calendar.HOUR_OF_DAY);
int minute = calendar.get(Calendar.MINUTE);
long dateMilliseconds = ((hour * 60L) + minute) * 60 * 1000;
long dayPartEndMilleseconds = ((toHour * 60L) + toMinute) * 60 * 1000;
// 计算当前dayPart的结束时间与当前时间millis的差
long millisecondsInThisDayPart = dayPartEndMilleseconds
- dateMilliseconds;
if (millis <= millisecondsInThisDayPart) {
// 如果加上millis还在当前dayPart里,直接返回end
end = new Date(date.getTime() + millis);
} else {
// 超出dayPart还剩多少millis没用
long remainderMillis = millis - millisecondsInThisDayPart;
Date dayPartEndDate = new Date((date.getTime() + millis)
- remainderMillis);
// 找到下一个工作时间段
DayPartResult dayPartResult = workDay.findNextDayPartStart(
index + 1, dayPartEndDate);
Date nextDayPartStart = dayPartResult.getDate();
DayPart nextDayPart = dayPartResult.getDayPart();
// 继续从下一个时间段查找
end = nextDayPart.add(nextDayPartStart, remainderMillis);
}
return end;
}
public boolean includes(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int hour = calendar.get(Calendar.HOUR_OF_DAY);
int minute = calendar.get(Calendar.MINUTE);
return (((fromHour < hour) || ((fromHour == hour) && (fromMinute <= minute))) && ((hour < toHour) || ((hour == toHour) && (minute <= toMinute))));
}
public boolean isStartAfter(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int hour = calendar.get(Calendar.HOUR_OF_DAY);
int minute = calendar.get(Calendar.MINUTE);
return ((hour < fromHour) || ((hour == fromHour) && (minute <= fromMinute)));
}
public Date getStartTime(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.HOUR_OF_DAY, fromHour);
calendar.set(Calendar.MINUTE, fromMinute);
return calendar.getTime();
}
public WorkDay getWorkDay() {
return workDay;
}
public void setWorkDay(WorkDay workDay) {
this.workDay = workDay;
}
public int getIndex() {
return index;
}
public void setIndex(int index) {
this.index = index;
}
public int getFromHour() {
return fromHour;
}
public void setFromHour(int fromHour) {
this.fromHour = fromHour;
}
public int getFromMinute() {
return fromMinute;
}
public void setFromMinute(int fromMinute) {
this.fromMinute = fromMinute;
}
public int getToHour() {
return toHour;
}
public void setToHour(int toHour) {
this.toHour = toHour;
}
public int getToMinute() {
return toMinute;
}
public void setToMinute(int toMinute) {
this.toMinute = toMinute;
}
}