将时间添加到 9 小时工作日
Add time to 9-hours days
我正在处理一个管理任务的基本项目。工作日从 8:00 到 17:00。任务有开始时间和估计持续时间。此估计持续时间为 分钟 。我要计算结束时间
我已经想出如何将开始时间增加天数,但它远非精确。我将估计持续时间除以 540(= 9 小时),这样我就知道大约有多少天。但我希望能够准确计算结束日期。
我无法将分钟添加到日历中,因为日历使用 24 小时制而不是 9 小时制。例如,如果开始时间是 2015-04-26 16:00:00.0,我加上 180 分钟(3 小时),那么结束时间就是 2015-04-27 10:00:00.0。这将如何完成?这是我目前所拥有的:
public TimeSpan calculateEstimatedDuration() {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S");
//divide by 540 because there are 9 hours in a work day
long workingDays = Math.round((this.getEstimatedDuration()/540));
//convert to calendar to add the estimated working days to the start date
Date startDate = this.getPlannedStartTime();
Calendar cal = Calendar.getInstance();
cal.setTime(startDate);
cal.add(Calendar.DATE,(int) workingDays);
String endTime = format.format(cal.getTime());
Date PlannedEndTime = format.parse(endTime);
return new TimeSpan(this.getPlannedStartTime(),PlannedEndTime);
}
如果估计持续时间以分钟为单位,为什么不直接加上分钟数?
calendar.add(Calendar.MINUTE, yourMinutes);
使用cal.add(Calendar.MINUTE, (int)taskMinutes);
,将taskMinutes
设置为getEstimatedDuration()
并确保它不大于int。
我找到了使用模运算符的解决方案,解释在评论中:
public TimeSpan addEstimatedToTime(Date time) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S");
//first we get the days
long workingDays = this.getEstimatedDuration() / 540;
//then the remaining hours and minutes
long remainderDays = this.getEstimatedDuration() % 540;
//then we calculate the hours
long workingHours = remainderDays/60;
//and the remaining are the minutes
long workingMinutes = remainderDays % 60;
//convert to calendar to add the estimated time to the given time
Calendar cal = Calendar.getInstance();
cal.setTime(time);
cal.add(Calendar.DATE,(int) workingDays);
cal.add(Calendar.HOUR , (int) workingHours);
cal.add(Calendar.MINUTE, (int) workingMinutes);
//format back to date
String endTime = format.format(cal.getTime());
Date plannedEndTime = format.parse(endTime);
return new TimeSpan(time,plannedEndTime);
}
我正在处理一个管理任务的基本项目。工作日从 8:00 到 17:00。任务有开始时间和估计持续时间。此估计持续时间为 分钟 。我要计算结束时间
我已经想出如何将开始时间增加天数,但它远非精确。我将估计持续时间除以 540(= 9 小时),这样我就知道大约有多少天。但我希望能够准确计算结束日期。
我无法将分钟添加到日历中,因为日历使用 24 小时制而不是 9 小时制。例如,如果开始时间是 2015-04-26 16:00:00.0,我加上 180 分钟(3 小时),那么结束时间就是 2015-04-27 10:00:00.0。这将如何完成?这是我目前所拥有的:
public TimeSpan calculateEstimatedDuration() {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S");
//divide by 540 because there are 9 hours in a work day
long workingDays = Math.round((this.getEstimatedDuration()/540));
//convert to calendar to add the estimated working days to the start date
Date startDate = this.getPlannedStartTime();
Calendar cal = Calendar.getInstance();
cal.setTime(startDate);
cal.add(Calendar.DATE,(int) workingDays);
String endTime = format.format(cal.getTime());
Date PlannedEndTime = format.parse(endTime);
return new TimeSpan(this.getPlannedStartTime(),PlannedEndTime);
}
如果估计持续时间以分钟为单位,为什么不直接加上分钟数?
calendar.add(Calendar.MINUTE, yourMinutes);
使用cal.add(Calendar.MINUTE, (int)taskMinutes);
,将taskMinutes
设置为getEstimatedDuration()
并确保它不大于int。
我找到了使用模运算符的解决方案,解释在评论中:
public TimeSpan addEstimatedToTime(Date time) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S");
//first we get the days
long workingDays = this.getEstimatedDuration() / 540;
//then the remaining hours and minutes
long remainderDays = this.getEstimatedDuration() % 540;
//then we calculate the hours
long workingHours = remainderDays/60;
//and the remaining are the minutes
long workingMinutes = remainderDays % 60;
//convert to calendar to add the estimated time to the given time
Calendar cal = Calendar.getInstance();
cal.setTime(time);
cal.add(Calendar.DATE,(int) workingDays);
cal.add(Calendar.HOUR , (int) workingHours);
cal.add(Calendar.MINUTE, (int) workingMinutes);
//format back to date
String endTime = format.format(cal.getTime());
Date plannedEndTime = format.parse(endTime);
return new TimeSpan(time,plannedEndTime);
}