假期 - 是否有java实现?

时间:2010-08-02 14:24:06

标签: java date

我想知道是否有一个jar文件可以执行以下操作:

DateMidnight dateInQuestion = new DateMidnight(12,12,2000);
DateChecker.isNationalHoliday(dateInQuestion, Locale.ITALY);

如果没有,为什么?当然,在99%的时间里,假期有很多适当的假期规则。

现在我们正在我们的数据库中建立一个表格,与国家+我们在每年不同日的假期有一些实施。我们必须为我们获得新客户的每个新国家添加我们的实施。

我们可以更轻松地做到这一点吗?

(如果在java领域没有这样的东西,我可以用其他语言移植吗?)

8 个答案:

答案 0 :(得分:14)

我已经编写了Jollyday API,我很想知道它有什么“粗糙”。我怎样才能改进它?很高兴收到你的来信。如果您愿意,请发送电子邮件至sdiedrichsen@yahoo.de。

顺便说一下。 Jollyday就像提问者要求的那样使用。请自己找。

干杯,斯文

P.S。:我从Ulrich Hilger找到了一个免费的网络服务,提供详细的全球假日信息。看看api.daybase.eu

答案 1 :(得分:13)

据我所知,Java中没有任何强大的功能。这也是有道理的,这种信息对变化极为敏感。硬编码会使您的代码在每次Java更新时都可能中断,这可能会导致大量维护和兼容性问题。目前处于最高水平时,时区在Java SE中进行了硬编码/维护,甚至单独导致many bugs

而是使用公共Web服务。例如。 http://www.bank-holidays.com

  

本网站通知您银行(以及许多国家的证券交易所和学校假期)因宗教或公共活动而关闭的所有日子。还列出了重大活动(选举,宣布罢工,交易会,节日,体育赛事......)。

     

我们的免费服务允许您查看当前日历年(仅查看)。   对于2欧元/国家/年,我们的付费服务(点击信用卡图标)可让您访问2000-2070的日历年。

并编写一个Java包装器。或者查找已经由Web服务支持的现有Java API。

答案 2 :(得分:5)

我还在Ruby Holidays Gem周围编写了一个java包装器(。它可以在Github上找到:https://github.com/gdepourtales/holidays。它与Jollyday(http://sourceforge.net/projects/jollyday/)类似。

答案 3 :(得分:4)

我发现这很有趣:

RESTful服务提供商 - Holiday API

对于节点项目 - node-holidayapi

我知道这与Java实现的问题并不相关。但是如果你的项目是RESTful(就像现在的大多数项目那样),那么这将为你提供一个开始的地方。 ;)

答案 4 :(得分:1)

我的搜索提出了两个结果(除了我在评论中列出的内容)。第一个,Holiday Client API,似乎是一个死的项目。第二个,Jollyday,看起来像一个非常粗糙但活跃的工作正在进行中。

至于为什么没有好的图书馆,我和汤姆在一起。我怀疑你的前提是“99%的时候假期有很多适当的假期规则”是不正确的。

答案 5 :(得分:0)

我认为你必须自己做这项工作。

国家假期由国家决定。它们可以改变,并且根据定义,它们不是通用的,因此不能通过某种算法捕获。

跟踪它们的唯一方法是将它们保持在每个国家的基础上。

也许有人确实已经这样做了(也许是各种各样的网络服务),但我怀疑,说实话。

答案 6 :(得分:0)

到目前为止,我还没见过。 但我可以建议你尝试链接谷歌日历api,从那里尝试通过日历提要或任何你称之为假日日历。 从那里,处理数据,如果需要,将其保存到数据库中。 毕竟,只要你有一个活跃的互联网连接,你就可以使用java来连接相关数据 即使对于其他语言,我也不认为有这样的直接方法。

答案 7 :(得分:0)

你可以使用我的holiday api,还有一个docker容器可以运行整个事情。

https://github.com/nager/Nager.Date

网络服务

获取意大利 2000 年的公共假期 https://date.nager.at/api/v2/PublicHolidays/2000/IT 您可以找到有关可用 API 方法的更多信息 here

Java 示例

//https://github.com/FasterXML/jackson-databind/
ObjectMapper mapper = new ObjectMapper();
MyValue value = mapper.readValue(new URL("https://date.nager.at/api/v2/PublicHolidays/2000/IT"), PublicHoliday[].class);

PublicHoliday.class

public class PublicHoliday
{
    public String Date;
    public String LocalName;
    public String Name;
    public String CountryCode;
    public Boolean Fixed;
    public Boolean Global;
    public String[] Counties;
    public String Type;
}

检索的 JSON 数据示例

[
    {
        "date": "2000-01-01",
        "localName": "Capodanno",
        "name": "New Year's Day",
        "countryCode": "IT",
        "fixed": true,
        "global": true,
        "counties": null,
        "type": "Public"
    },
    ...
]