2012-09-25 36 views
1

我需要能够创建自定义日历,可以省略我从日期集指定的某些假期。例如,我可能需要在日期上创建一个键值为map的地图,但只想循环省略某些假期的日期。一个例子是,我想看看在特定的一天使用千瓦时的德国政府建筑物中有多少电力,但省略假期。我考虑过为此使用joda-time,考虑到我可能有一个像<DateTime, Double>这样的地图,但我不确定这是否可行。在乔达时间创建自定义日历

要做到这一点,最好的方法是什么?

回答

2

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

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

希望规则将支持您的区域设置中的所有场景。有时候不同的位置对于实际使用半通用库的时间并没有足够的相同假设。

0

检查是天长假manualy

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

我会避免保留代码中的假期......它甚至比[每日跆拳道...](http://thedailywtf.com/Article/Time_for_a_tblHoliday.aspx)...更糟... – Erk

0

为@EdwinBuck说,你的术语是混乱,使人们很难理解你的问题。

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

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

例如

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 
}