我需要能够创建可以省略我从日期集中指定的某些假期的自定义日历。例如,我可能需要创建一个以日期为键的地图,但只想遍历省略某些假期的日期。一个例子是,我想查看德国政府建筑物在某一天使用了多少千瓦时的电量,但忽略了节假日。我考虑过使用joda-time
这个,考虑到我可能有一个像 键控的地图<DateTime, Double>
,但我不确定这是否可行。
这样做的最佳方法是什么?
您在“商业日历”的意义上使用日历这个词,而不是在java.util.Calendar
Joda 或 JodaChronology
能理解的意义上。Intervals
基本上,您的“日历”是从 Joda中选择一组 Joda 的规则的应用Chronology
。
我相信您会发现,与其尝试在 Joda 之上构建另一个业务日历系统,不如使用ObjectLabKit更好,它是一个支持业务日历的业务库,包括假期规则等。
希望规则将支持您所在地区的所有场景。有时,不同的位置在实际使用半通用库时并没有共享足够多的相同时间假设。
手动检查是假日
private static final List<LocalDate> HOLIDAYS = Arrays.asList(new LocalDate[]{
new LocalDate(2000, DateTimeConstants.JANUARY, 1),
new LocalDate(2000, DateTimeConstants.JANUARY, 7),
new LocalDate(2000, DateTimeConstants.JANUARY, 14),
new LocalDate(2000, DateTimeConstants.JANUARY, 28),
/* ... */
new LocalDate(2000, DateTimeConstants.DECEMBER, 25),
});
public static boolean isHoliday(LocalDate checkedDate)
{
for (final LocalDate date : HOLIDAYS)
{
if(date.getMonthOfYear() == checkedDate.getMonthOfYear()
&& date.getDayOfMonth() == checkedDate.getDayOfMonth())
{
return true;
}
}
return false;
}
正如@EdwinBuck 所说,您的术语令人困惑,使人们难以理解您的问题。
我不知道你为什么想要一个 Map ?有什么价值?
如果您正在寻找一些查询来了解某天是否是假期,那么使用 Set 可能更有意义。(我之前没有用过Joda date time,只是在这里写一些明智的东西)
例如
Set<DateTime> holidays = new HashSet<DateTime>();
holidays.add(....);
// add all holidays to the set
// if you need to check if certain day is holiday so you can skip it:
if (!holidays.contains(someDay)) {
// it is not a holiday
// do anything you need
}