java - JAVA - 如何制作自定义假期并跟踪它们
问题描述
制作允许您添加特定假期的日历
解决方案
你应该使用这个java.time
包。特别是MonthDay
代表假期的类,因为假期通常是某个固定的月份+日期(但是,Set<MonthDay>
如果假期是“动态的”,您将需要比 a 更复杂的逻辑)。
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.Month;
import java.time.MonthDay;
import java.util.HashSet;
import java.util.Set;
public class CustomHolidays {
private final Set<MonthDay> holidays = new HashSet<>();
public void addHoliday(final MonthDay monthDay) {
holidays.add(monthDay);
}
public boolean isHoliday(final LocalDate localDate) {
return isWeekend(localDate) || holidays.contains(toMonthDay(localDate));
}
public int numberOfWorkdaysBetween(final LocalDate startInclusive, final LocalDate endInclusive) {
int c = 0;
for (LocalDate i = startInclusive; !i.isAfter(endInclusive); i = i.plusDays(1)) {
if (!isHoliday(i)) {
c++;
}
}
return c;
}
private boolean isWeekend(final LocalDate localDate) {
final DayOfWeek dow = localDate.getDayOfWeek();
return dow == DayOfWeek.SATURDAY || dow == DayOfWeek.SUNDAY;
}
private static MonthDay toMonthDay(final LocalDate localDate) {
return MonthDay.of(localDate.getMonth(), localDate.getDayOfMonth());
}
public static void main(String[] args) {
final CustomHolidays ch = new CustomHolidays();
ch.addHoliday(MonthDay.of(Month.MAY, 1));
ch.addHoliday(MonthDay.of(Month.MAY, 2));
ch.addHoliday(MonthDay.of(Month.MAY, 3));
System.out.println(ch.numberOfWorkdaysBetween(LocalDate.of(2018, 5, 1), LocalDate.of(2018, 5, 8)));
}
}
输出:3
推荐阅读
- oauth-2.0 - 在 OAuth2.0 中,客户端凭据应该作为 post 参数还是作为传输标头发送?
- types - 类型错误 F#“类型“int”不匹配......”
- google-sheets - 使用涉及月份的绝对引用的 Google 表格选择查询()
- java - Java Spring JSON 解析错误:无法从 START_ARRAY 令牌中反序列化实例
- mysql - MySQL案例条件扣除产生余额
- javascript - 我们可以将python与react一起使用吗?
- java - 成功上传多个文件后拒绝访问
- c# - Roslyn:如何在没有源代码的情况下从方法体中获取类型依赖项
- fortran - 使用 fortran 计算体积
- go - GoLang 更新 DynamoDB