如何从给定的区域设置创建一个Jollyday HolidayManager实例?

时间:2016-10-10 09:11:42

标签: java

在我的应用程序中,用户可以从可用语言环境列表中设置她Locale。应用程序需要确定给定日期是否为假日,并且我正在使用jollyday来执行此任务。

这是我目前的代码:

public boolean isHoliday(Calendar cal) {
    HolidayManager m = HolidayManager.getInstance();
    return m.isHoliday(cal);
}

我可以将其更改为以下代码以设置特定的HolidayCalendar

public boolean isHoliday(Calendar cal) {
    HolidayManager m = HolidayManager.getInstance(HolidayCalendar.GERMANY);
    return m.isHoliday(cal);
}

但是这个方法已被弃用,我需要根据用户区域设置确定我需要哪个HolidayCalendar。我想做的是这样的事情:

public boolean isHoliday(Calendar cal, Locale loc) {
    HolidayManager m = HolidayManager.getInstance(loc);
    return m.isHoliday(cal);
}

我知道HolidayManager正在使用Locale.getDefault()并且Holiday中也有公共方法(请参阅here)但我无法弄清楚如何执行此操作文档非常简短。

我的问题:我可以根据特定区域设置获得假期吗?我是否必须为所有语言环境编写一个主要switch语句以匹配HolidayCalendar

更新我创建了a PR to the project并自行添加了功能。 PR已经合并

1 个答案:

答案 0 :(得分:0)

jollyday/util/ResourceUtil.java中,我看到了locale-holiday_description对的哈希映射,但它是私有静态的,并没有在任何地方填充。

https://github.com/svendiedrichsen/jollyday/blob/master/src/main/java/de/jollyday/util/ResourceUtil.java#L61

private static final Map<Locale, ResourceBundle> HOLIDAY_DESCRIPTION_CACHE = new HashMap<>();

所以,我相信,没有任何直接的方法来做你想要的。它会默认为默认的Locale。但您可以根据需要对该包进行分叉和修改,并在代码中使用它。

此外,尝试打开问题请求https://github.com/svendiedrichsen/jollyday/issues