java 获取三个工作日_在Java中的两个工作日之间获取分钟

我正在尝试计算Java中两个Joda

DateTimes或Calendars之间的分钟。当然,如果我可以使用Minutes.minutesBetween函数,这将很简单,但是我只能计算工作日和8:00

AM-6:00 PM之间的分钟数。

例如:

开始日期:2015/3/11 16:00

结束日期:2015/3/11 17:00

这很简单,因为恰好是60分钟。因为这是一个工作日,且在给定的工作时间之间。

现在我要计算的是:

开始日期:2015/03/11 17:00

结束日期:2015/03/12 09:00

即使之间有更多的分钟,这也应该返回120分钟,因为两个日期之间只有两个工作小时。

有时在两个日期之间还有一个周末,也不应添加这些分钟。

我一直在不遗余力地实现这一目标,但没有找到解决方案。

有任何想法吗?

提前致谢。

编辑:感谢戴维斯·布罗达的伪代码,我找到了一个解决方案:

private static int BEGINWORKHOUR = 8;

private static int ENDWORKHOUR = 16;

public int getWorkedMinutes(){

Calendar start = (Calendar) this.startTime.clone();

Calendar end = (Calendar) this.endTime.clone();

if(start.get(Calendar.HOUR_OF_DAY) < BEGINWORKHOUR){

start.set(Calendar.HOUR_OF_DAY, BEGINWORKHOUR);

start.set(Calendar.MINUTE, 0);

}

if(end.get(Calendar.HOUR_OF_DAY) >= ENDWORKHOUR){

end.set(Calendar.HOUR_OF_DAY, ENDWORKHOUR);

end.set(Calendar.MINUTE, 0);

}

int workedMins = 0;

while(!sameDay(start, end)){

workedMins += workedMinsDay(start);

start.add(Calendar.DAY_OF_MONTH, 1);

start.set(Calendar.HOUR_OF_DAY, BEGINWORKHOUR);

start.set(Calendar.MINUTE, 0);

}

workedMins += (end.get(Calendar.MINUTE) - start.get(Calendar.MINUTE)) + ((end.get(Calendar.HOUR_OF_DAY) - start.get(Calendar.HOUR_OF_DAY))*60);

return workedMins;

}

private int workedMinsDay(Calendar start){

if((start.get(Calendar.DAY_OF_WEEK) == 1) || (start.get(Calendar.DAY_OF_WEEK) == 6)) return 0;

else return (60 - start.get(Calendar.MINUTE)) + ((ENDWORKHOUR - start.get(Calendar.HOUR_OF_DAY) - 1)*60);

}

private boolean sameDay(Calendar start, Calendar end){

if(start.get(Calendar.YEAR) == end.get(Calendar.YEAR) && start.get(Calendar.MONTH) == end.get(Calendar.MONTH) &&

start.get(Calendar.DAY_OF_MONTH) == end.get(Calendar.DAY_OF_MONTH)) return true;

else return false;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java计算两个日期之间相差天数可以使用Java 8的新时间API解决。以下是计算相隔天数的示例代码: ```java import java.time.LocalDate; import java.time.temporal.ChronoUnit; public class DateUtils { public static long getDaysBetweenDates(LocalDate startDate, LocalDate endDate) { return ChronoUnit.DAYS.between(startDate, endDate); } public static void main(String[] args) { LocalDate startDate = LocalDate.of(2021, 9, 1); LocalDate endDate = LocalDate.of(2021, 9, 20); long daysBetweenDates = getDaysBetweenDates(startDate, endDate); System.out.println("相隔天数:" + daysBetweenDates); } } ``` 运行上述代码,将会输出:相隔天数:19 需要注意的是,Java 8的新时间API LocalDate类的实例是不可变的,因此计算相隔天数时不会改变原始日期对象。 如果你需要计算两个日期之间相差的工作日(不包括周末和节假日),可以使用第三方库jollyday来实现。你可以在项目添加以下依赖项: ```xml <dependency> <groupId>de.jollyday</groupId> <artifactId>jollyday</artifactId> <version>0.5.9</version> </dependency> ``` 然后,使用以下代码计算相隔工作日数量: ```java import de.jollyday.HolidayCalendar; import de.jollyday.HolidayManager; import java.time.LocalDate; import java.util.HashSet; import java.util.Set; public class DateUtils { public static long getWorkingDaysBetweenDates(LocalDate startDate, LocalDate endDate) { Set<LocalDate> holidays = getHolidays(startDate, endDate); long daysBetween = startDate.datesUntil(endDate).count(); long workingDays = 0; for (int i = 0; i < daysBetween; i++) { LocalDate date = startDate.plusDays(i); if (isWorkingDay(date) && !holidays.contains(date)) { workingDays++; } } return workingDays; } private static Set<LocalDate> getHolidays(LocalDate startDate, LocalDate endDate) { HolidayManager holidayManager = HolidayManager.getInstance(HolidayCalendar.CHINA); Set<LocalDate> holidays = new HashSet<>(); for (LocalDate date = startDate; date.isBefore(endDate); date = date.plusDays(1)) { if (holidayManager.isHoliday(date)) { holidays.add(date); } } return holidays; } private static boolean isWorkingDay(LocalDate date) { return date.getDayOfWeek().getValue() <= 5; } public static void main(String[] args) { LocalDate startDate = LocalDate.of(2021, 9, 1); LocalDate endDate = LocalDate.of(2021, 9, 20); long workingDaysBetweenDates = getWorkingDaysBetweenDates(startDate, endDate); System.out.println("相隔工作日:" + workingDaysBetweenDates); } } ``` 运行上述代码,将会输出:相隔工作日:14 在上述示例代码,我们使用了HolidayManager类和HolidayCalendar枚举来获取指定日期范围内的节假日。然后,我们使用isWorkingDay方法来检查日期是否为工作日,并使用Set集合来保存所有节假日。最后,我们遍历日期范围内的每一天,并使用isWorkingDay和holidays集合来计算相隔工作日的数量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值