今天必须弄清楚这一点,并不喜欢我在网上看到的任何答案.所以这是我遇到这个问题的其他人的解决方案.请注意,我假设如果开始或结束是在周末,我会在下一个工作日(周六或周日成为下周一).之后就像获取之间的天数一样简单,然后计算出之间的周末数,最后减去每个周末的2天:
public class DateUtil {
public static final int DAYS_PER_WEEKEND = 2;
public static final int WEEK_START = DateTimeConstants.MONDAY;
public static final int WEEK_END = DateTimeConstants.FRIDAY;
public static int workdayDiff(Date d1, Date d2) {
LocalDate start = LocalDate.fromDateFields(d1);
LocalDate end = LocalDate.fromDateFields(d2);
start = toWorkday(start);
end = toWorkday(end);
int daysBetween = Days.daysBetween(start, end).getDays();
int weekendsBetween = Weeks.weeksBetween(start.withDayOfWeek(WEEK_START), end.withDayOfWeek(WEEK_START)).getWeeks();
return daysBetween - (weekendsBetween * DAYS_PER_WEEKEND);
}
public static LocalDate toWorkday(LocalDate d) {
if (d.getDayOfWeek() > WEEK_END) {
return d.plusDays(DateTimeConstants.DAYS_PER_WEEK - d.getDayOfWeek() + 1);
}
return d;
}
}
我相信有人会来并评论说不是每个人都有同样的周末等等等等.我将区域设置差异作为练习对象:)