Jollyday is a java library to query public holidays. Currently, we support over 70 countries.
Thanks to @svendiedrichsen who started jollyday!
Jollyday is based on Java 11 and can be used directly as dependency via maven or gradle e.g. The calculation basis of the public holidays for each country is based on a xml file and will be mapped via Jakarta XML Binding. If you already use one of these libraries in your project than just use the specific jollyday dependency.
Maven (click to expand)
You need the core library, that defines all functionality and the api for you as developer.
<dependency>
<groupId>de.focus-shift</groupId>
<artifactId>jollyday-core</artifactId>
<version>${version}</version>
</dependency>
Additionally, the XML-Binding library of your choice. At the moment we do only support JAXB, but in the future there should be more that one.
Jakarta XML Binding (JAXB)
<dependency>
<groupId>de.focus-shift</groupId>
<artifactId>jollyday-jaxb</artifactId>
<version>${version}</version>
</dependency>
Gradle (click to expand)
You need the core library, that defines all functionality and the api for you as developer.
implementation group: 'de.focus-shift', name: 'jollyday-core', version: '${version}'
Additionally, the XML-Binding library of your choice. At the moment we do only support JAXB, but in the future there should be more that one.
Jakarta XML Binding (JAXB)
implementation group: 'de.focus-shift', name: 'jollyday-jaxb', version: '${version}'
with the Java Platform Module System (click to expand)
If you want to use Jollyday in a project that is modularized via java modules you need to require the de.focus_shift.jollyday.core
module via
module your.application {
...
requires de.focus_shift.jollyday.core;
...
}
Retrieve public holidays for a year (click to expand)
Returns all german public holidays in 2022
import de.focus_shift.jolldayday.core.Holiday;
import de.focus_shift.jolldayday.core.HolidayCalendar.GERMANY;
import de.focus_shift.jolldayday.core.HolidayManager;
import de.focus_shift.jolldayday.core.ManagerParameters;
import java.time.LocalDate;
final HolidayManager holidayManager = HolidayManager.getInstance(ManagerParameters.create(GERMANY));
final Set<Holiday> holidays = holidayManager.getHolidays(2022);
Retrieve public holidays for a period of days (click to expand)
Returns all german public holidays from the 15th of april in 2022 until the 31st of may in 2023
import de.focus_shift.jolldayday.core.Holiday;
import de.focus_shift.jolldayday.core.HolidayCalendar.GERMANY;
import de.focus_shift.jolldayday.core.HolidayManager;
import de.focus_shift.jolldayday.core.ManagerParameters;
import java.time.LocalDate;
final HolidayManager holidayManager = HolidayManager.getInstance(ManagerParameters.create(GERMANY));
final Set<Holiday> holidays = holidayManager.getHolidays(LocalDate.of(2022, 4, 15), LocalDate.of(2023, 5, 31));
Check if a specific date is a public holiday (click to expand)
Returns true or false if a date is a public holidays in germany.
import de.focus_shift.jolldayday.core.Holiday;
import de.focus_shift.jolldayday.core.HolidayCalendar.GERMANY;
import de.focus_shift.jolldayday.core.HolidayManager;
import de.focus_shift.jolldayday.core.ManagerParameters;
import java.time.LocalDate;
final HolidayManager holidayManager = HolidayManager.getInstance(ManagerParameters.create(GERMANY));
final boolean isHoliday = holidayManager.isHoliday(LocalDate.of(2022, 6, 6));
Returns true or false if a date is a public holidays in Baden-Württemberg in germany.
import de.focus_shift.jolldayday.core.Holiday;
import de.focus_shift.jolldayday.core.HolidayCalendar.GERMANY;
import de.focus_shift.jolldayday.core.HolidayManager;
import de.focus_shift.jolldayday.core.ManagerParameters;
import java.time.LocalDate;
final HolidayManager holidayManager = HolidayManager.getInstance(ManagerParameters.create(GERMANY));
final boolean isHoliday = holidayManager.isHoliday(LocalDate.of(2022, 6, 6), "bw");
Override an existing country (click to expand)
If you want to override the public holidays of a provided country like germany, you need to put a holiday file
with the name Holiday_de.xml
on your classpath. Jollyday will pick up yours at first. The File and the hierarchy needs
to be identical to the one you want to override.
The holiday file structure needs to look like the one below. The XML Schema Definition file can be viewed here
<?xml version="1.0" encoding="UTF-8"?>
<Configuration hierarchy="de" description="Germany"
xmlns="https://focus_shift.de/jollyday/schema/holiday"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://focus_shift.de/jollyday/schema/holiday https://focus_shift.de/jollyday/schema/holiday/holiday.xsd">
<Holidays>
<!-- Add the holidays here-->
</Holidays>
...
<SubConfigurations hierarchy="bw" description="Baden-Württemberg">
<Holidays>
...
</Holidays>
</SubConfigurations>
</Configuration>
If you want to support us at the development on jollyday than take a look at Contributing to jollyday. If you have any kind of questions please go to Discussions and see if there are already answers and if not please open a discussion with your question. If you want to raise an issue or bug you can create a new issue
git clone git@github.com:focus-shift/jollyday.git
./mvnw clean verify
or for Windows user:
./mvnw.cmd clean verify