在joda时间创建自定义日历

时间:2012-09-25 21:13:22

标签: java date datetime jodatime

我需要能够创建自定义日历,这些日历可以省略我从日期设置中指定的某些假期。例如,我可能需要创建一个键入日期的地图,但只想循环忽略某些假期的日期。一个例子是我想知道在某一天使用的德国政府建筑物中有多少电力,但省略了假期。我考虑过使用joda-time,考虑到我可能有一个像<DateTime, Double>这样的地图,但我不确定这是否会奏效。

这样做最好的方法是什么?

3 个答案:

答案 0 :(得分:2)

您在“商务日历”意义上使用“日历”这个词,而不是java.util.Calendar或Joda Chronology理解的意义上的。基本上,您的“日历”是规则的应用,从Joda Intervals中选择一组Joda Chronology

我相信你会发现,而不是试图在Joda之上构建另一个商业日历系统,你最好不要使用ObjectLabKit,这是一个支持商业日历的商业图书馆,包括假日规则等。

希望规则支持区域设置中的所有方案。有时,不同的位置对实际使用半通用库的时间没有足够的相同假设。

答案 1 :(得分:0)

手动检查是假日

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;
}

答案 2 :(得分:0)

正如@EdwinBuck所说,你的术语令人困惑,让人们很难理解你的问题。

我不知道你为什么想要一张地图?有什么价值?

如果您正在寻找一些查询以了解某一天是否是假日,那么使用Set可能更有意义。 (我以前没有使用过Joda的约会时间,只是在这里写一些合理的东西)

e.g。

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
}