2012-09-25 18 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 
}