Skip to content

pmcau/AustralianHolidays

Repository files navigation

AustralianHolidays

Build status NuGet Status

.net library retrieving public holiday dates in Australia.

See Milestones for release notes.

NuGet package

Website

Disclaimer

The holiday dates provided are based on best efforts to ensure accuracy. However, dates are not guarantee to be correct or up-to-date. Consumers should verify the holiday dates with official sources before relying on them for any critical purposes. The authors and contributors of this project are not responsible for any inaccuracies or any consequences arising from the use of this information.

Official sources

Public Holiday Substitution Rules

When public holidays fall on weekends, Australian states and territories have different rules about whether a substitute weekday holiday is provided. This section documents these substitution rules for all major public holidays.

New Year's Day (1st January)

New South Wales - Additional day when on weekend

  • When 1st January falls on a weekday → observed on 1st January
  • When 1st January falls on Saturday → Both Saturday (1st January) and Monday (3rd January) are public holidays
  • When 1st January falls on Sunday → Both Sunday (1st January) and Monday (2nd January) are public holidays
  • Important: This is additional, not substitution - both the actual 1st January date AND the Monday are public holidays

All Other States

  • New Year's Day is always observed on 1 January, regardless of the day of the week
  • No substitute holidays are provided when it falls on a weekend

Australia Day (26th January)

All States and Territories - Substitution (Monday replaces weekend day)

  • When 26th January falls on a weekday → observed on 26th January
  • When 26th January falls on Saturday → Only Monday (28th January) is a public holiday, labeled "Australia Day (observed)"
  • When 26th January falls on Sunday → Only Monday (27th January) is a public holiday, labeled "Australia Day (observed)"
  • Important: This is substitution, not additional - the actual 26 January date is NOT a public holiday when it falls on a weekend, only the Monday substitute counts
  • This is consistent across all Australian states and territories

ANZAC Day (25th April)

ANZAC Day is observed on 25th April each year. When 25th April falls on a weekend (Saturday or Sunday), some Australian states and territories provide an additional public holiday on the following Monday.

Important: The Monday is an "additional" holiday, not a "substitution" - both the actual 25th April and the Monday are public holidays. The Monday provides workers with an extra day off since the actual ANZAC Day fell on a non-working day.

States with Additional Day Off

Western Australia - Both Saturday and Sunday

  • When ANZAC Day falls on Saturday (25th April) → Monday (27th April) is "Anzac Day (additional)"
  • When ANZAC Day falls on Sunday (25th April) → Monday (26th April) is "Anzac Day (additional)"
  • Established: 1972 via Public and Bank Holidays Act 1972

Queensland - Sunday only

  • When ANZAC Day falls on Sunday (25th April) → Monday (26th April) is "Anzac Day (additional)"
  • No substitute when ANZAC Day falls on Saturday
  • Established: Holidays Act 1983

New South Wales - Both Saturday and Sunday

  • When ANZAC Day falls on Saturday (25th April) → Monday (27th April) is "Anzac Day (additional)"
  • When ANZAC Day falls on Sunday (25th April) → Monday (26th April) is "Anzac Day (additional)"
  • Established: 2026

Australian Capital Territory - Both Saturday and Sunday

  • When ANZAC Day falls on Saturday (25th April) → Monday (27th April) is "Anzac Day (additional)"
  • When ANZAC Day falls on Sunday (25th April) → Monday (26th April) is "Anzac Day (additional)"
  • Established: Approximately 2020, confirmed for 2026

Northern Territory - Sunday only

  • When ANZAC Day falls on Sunday (25th April) → Monday (26th April) is "Anzac Day (additional)"
  • No substitute when ANZAC Day falls on Saturday

States Without Additional Day

ANZAC Day is always observed on 25th April, regardless of the day of the week. No additional Monday holiday is provided when 25th April falls on a weekend.

  • Victoria
  • Tasmania
  • South Australia

Christmas Day (25th December) and Boxing Day (26 December)

Most States (NSW, VIC, TAS, WA, ACT, QLD, NT)

  • Christmas Day (25 December) and Boxing Day (26th December) are always observed on their actual dates
  • When either or both fall on a weekend, additional weekday holidays are provided:
    • If only one falls on weekend → One "Christmas (additional)" on the next weekday after Boxing Day
    • If both fall on weekend (Sat/Sun) → Two "Christmas (additional)" days on the following Monday and Tuesday
  • Examples:
    • 2026: Christmas Friday, Boxing Day Saturday → Monday 28th December is "Christmas (additional)"
    • 2027: Christmas Saturday, Boxing Day Sunday → Monday 27th December and Tuesday 28th December are both "Christmas (additional)"

South Australia - Special "Proclamation Day" rules

  • 25th December is always "Christmas Day"
  • 26th December is called "Proclamation Day" (instead of Boxing Day)
  • Substitution rules:
    • If 26th December is a weekday → "Proclamation and Boxing Day"
    • If 26th December is Saturday → "Proclamation Day" + Monday 28th December "Proclamation Day (additional)"
    • If 26th December is Sunday → "Proclamation Day" + Monday 27th December "Proclamation Day (additional)"
  • Note: Only one additional day even when Christmas is also on weekend

Usage

The main entry point is AustralianHolidays.Holidays

IsHoliday

Determines if a given date is a public holiday in a specified Australian state.

var date = new Date(2024, 12, 25);

IsTrue(date.IsHoliday(State.NSW));

snippet source | anchor

With name

Determines if a specific date is a recognized public holiday in a specified state and retrieving the name of the holiday if it is.

var date = new Date(2024, 12, 25);

IsTrue(date.IsHoliday(State.NSW, out var name));

AreEqual("Christmas Day", name);

snippet source | anchor

Isstateholiday

The same as IsHoliday but a convenience wrapper named method is provided for each state.

var date = new Date(2024, 12, 25);

IsTrue(date.IsNswHoliday());

snippet source | anchor

With name

The same as IsHoliday with name but a convenience wrapper named method is provided for each state.

var date = new Date(2024, 12, 25);

IsTrue(date.IsNswHoliday(out var name));
AreEqual("Christmas Day", name);

snippet source | anchor

ForYears

Retrieves public holidays for all states over a specified range of years.

var holidays = Holidays.ForYears(startYear: 2025, yearCount: 2);
foreach (var (date, state, name) in holidays)
{
    Console.WriteLine($"date: {date}, state: {state}, name: {name}");
}

snippet source | anchor

For single state

Retrieves public holidays for a specified state over a given range of years.

var holidays = Holidays.ForYears(State.NSW, startYear: 2025, yearCount: 2);
foreach (var (date, name) in holidays)
{
    Console.WriteLine($"date: {date}, name: {name}");
}

snippet source | anchor

NationalForYears

Gets federal holidays that are common for all states.

var holidays = Holidays.ForNational(2025);
foreach (var (date, name) in holidays)
{
    Console.WriteLine($"date: {date}, name: {name}");
}

snippet source | anchor

Holidays For State

var holidays = Holidays.ForNsw(2025);
foreach (var (date, name) in holidays)
{
    Console.WriteLine($"date: {date}, name: {name}");
}

snippet source | anchor

Federal government shutdown

IsFederalGovernmentShutdown

var date = new Date(2025, 12, 30);
var result = date.IsFederalGovernmentShutdown();

IsTrue(result);

snippet source | anchor

GetFederalGovernmentShutdown

var (start, end) = Holidays.GetFederalGovernmentShutdown(startYear: 2024);

AreEqual(new Date(2024, 12, 25), start);
AreEqual(new Date(2025, 1, 1), end);

snippet source | anchor

ExportToMarkdown

Federal

var md = await Holidays.ExportToMarkdown();

snippet source | anchor

Common holidays for all states

2026 2027 2028 2029 2030
New Year's Day Thu 01 Jan Fri 01 Jan Sat 01 Jan Mon 01 Jan Tue 01 Jan
Australia Day Mon 26 Jan Tue 26 Jan Wed 26 Jan Fri 26 Jan
Australia Day
(observed)
Mon 28 Jan
Good Friday Fri 03 Apr Fri 26 Mar Fri 14 Apr Fri 30 Mar Fri 19 Apr
Easter Saturday Sat 04 Apr Sat 27 Mar Sat 15 Apr Sat 31 Mar Sat 20 Apr
Easter Sunday Sun 05 Apr Sun 28 Mar Sun 16 Apr Sun 01 Apr Sun 21 Apr
Easter Monday Mon 06 Apr Mon 29 Mar Mon 17 Apr Mon 02 Apr Mon 22 Apr
Anzac Day Sat 25 Apr Sun 25 Apr Tue 25 Apr Wed 25 Apr Thu 25 Apr
Anzac Day
(additional)
Mon 27 Apr
Christmas Day Fri 25 Dec Sat 25 Dec Mon 25 Dec Tue 25 Dec Wed 25 Dec
Boxing Day Sat 26 Dec Sun 26 Dec Tue 26 Dec Wed 26 Dec Thu 26 Dec
Christmas
(additional)
Mon 28 Dec Mon 27 Dec
Tue 28 Dec

State

var md = await Holidays.ExportToMarkdown(state);

snippet source | anchor

Australian Capital Territory (Reference)

2026 2027 2028 2029 2030
New Year's Day Thu 01 Jan Fri 01 Jan Sat 01 Jan Mon 01 Jan Tue 01 Jan
Australia Day Mon 26 Jan Tue 26 Jan Wed 26 Jan Fri 26 Jan
Australia Day
(not holiday)
Sat 26 Jan
Australia Day
(observed)
Mon 28 Jan
Canberra Day Mon 09 Mar Mon 08 Mar Mon 13 Mar Mon 12 Mar Mon 11 Mar
Good Friday Fri 03 Apr Fri 26 Mar Fri 14 Apr Fri 30 Mar Fri 19 Apr
Easter Saturday Sat 04 Apr Sat 27 Mar Sat 15 Apr Sat 31 Mar Sat 20 Apr
Easter Sunday Sun 05 Apr Sun 28 Mar Sun 16 Apr Sun 01 Apr Sun 21 Apr
Easter Monday Mon 06 Apr Mon 29 Mar Mon 17 Apr Mon 02 Apr Mon 22 Apr
Anzac Day Sat 25 Apr Sun 25 Apr Tue 25 Apr Wed 25 Apr Thu 25 Apr
Anzac Day
(additional)
Mon 27 Apr Mon 26 Apr
Reconciliation Day Mon 01 Jun Mon 31 May Mon 29 May Mon 28 May Mon 27 May
King's Birthday Mon 08 Jun Mon 14 Jun Mon 12 Jun Mon 11 Jun Mon 10 Jun
Labour Day Mon 05 Oct Mon 04 Oct Mon 02 Oct Mon 01 Oct Mon 07 Oct
Christmas Day Fri 25 Dec Sat 25 Dec Mon 25 Dec Tue 25 Dec Wed 25 Dec
Boxing Day Sat 26 Dec Sun 26 Dec Tue 26 Dec Wed 26 Dec Thu 26 Dec
Christmas
(additional)
Mon 28 Dec Mon 27 Dec
Tue 28 Dec

New South Wales (Reference)

2026 2027 2028 2029 2030
New Year's Day Thu 01 Jan Fri 01 Jan Sat 01 Jan Mon 01 Jan Tue 01 Jan
New Year's Day
(additional)
Mon 03 Jan
Australia Day Mon 26 Jan Tue 26 Jan Wed 26 Jan Fri 26 Jan
Australia Day
(observed)
Mon 28 Jan
Good Friday Fri 03 Apr Fri 26 Mar Fri 14 Apr Fri 30 Mar Fri 19 Apr
Easter Saturday Sat 04 Apr Sat 27 Mar Sat 15 Apr Sat 31 Mar Sat 20 Apr
Easter Sunday Sun 05 Apr Sun 28 Mar Sun 16 Apr Sun 01 Apr Sun 21 Apr
Easter Monday Mon 06 Apr Mon 29 Mar Mon 17 Apr Mon 02 Apr Mon 22 Apr
Anzac Day Sat 25 Apr Sun 25 Apr Tue 25 Apr Wed 25 Apr Thu 25 Apr
Anzac Day
(additional)
Mon 27 Apr Mon 26 Apr
King's Birthday Mon 08 Jun Mon 14 Jun Mon 12 Jun Mon 11 Jun Mon 10 Jun
Bank Holiday Mon 03 Aug Mon 02 Aug Mon 07 Aug Mon 06 Aug Mon 05 Aug
Labour Day Mon 05 Oct Mon 04 Oct Mon 02 Oct Mon 01 Oct Mon 07 Oct
Christmas Day Fri 25 Dec Sat 25 Dec Mon 25 Dec Tue 25 Dec Wed 25 Dec
Boxing Day Sat 26 Dec Sun 26 Dec Tue 26 Dec Wed 26 Dec Thu 26 Dec
Christmas
(additional)
Mon 28 Dec Mon 27 Dec
Tue 28 Dec

Northern Territory (Reference)

2026 2027 2028 2029 2030
New Year's Day Thu 01 Jan Fri 01 Jan Sat 01 Jan Mon 01 Jan Tue 01 Jan
Australia Day Mon 26 Jan Tue 26 Jan Wed 26 Jan Fri 26 Jan
Australia Day
(observed)
Mon 28 Jan
Good Friday Fri 03 Apr Fri 26 Mar Fri 14 Apr Fri 30 Mar Fri 19 Apr
Easter Saturday Sat 04 Apr Sat 27 Mar Sat 15 Apr Sat 31 Mar Sat 20 Apr
Easter Sunday Sun 05 Apr Sun 28 Mar Sun 16 Apr Sun 01 Apr Sun 21 Apr
Easter Monday Mon 06 Apr Mon 29 Mar Mon 17 Apr Mon 02 Apr Mon 22 Apr
Anzac Day Sat 25 Apr Sun 25 Apr Tue 25 Apr Wed 25 Apr Thu 25 Apr
Anzac Day
(additional)
Mon 26 Apr
May Day Mon 04 May Mon 03 May Mon 01 May Mon 07 May Mon 06 May
King's Birthday Mon 08 Jun Mon 14 Jun Mon 12 Jun Mon 11 Jun Mon 10 Jun
Picnic Day Mon 03 Aug Mon 02 Aug Mon 07 Aug Mon 06 Aug Mon 05 Aug
Christmas Eve
(partial day)
Thu 24 Dec Fri 24 Dec Sun 24 Dec Mon 24 Dec Tue 24 Dec
Christmas Day Fri 25 Dec Sat 25 Dec Mon 25 Dec Tue 25 Dec Wed 25 Dec
Boxing Day Sat 26 Dec Sun 26 Dec Tue 26 Dec Wed 26 Dec Thu 26 Dec
Christmas
(additional)
Mon 28 Dec Mon 27 Dec
Tue 28 Dec
New Year's Eve
(partial day)
Thu 31 Dec Fri 31 Dec Sun 31 Dec Mon 31 Dec Tue 31 Dec

Queensland (Reference)

2026 2027 2028 2029 2030
New Year's Day Thu 01 Jan Fri 01 Jan Sat 01 Jan Mon 01 Jan Tue 01 Jan
Australia Day Mon 26 Jan Tue 26 Jan Wed 26 Jan Fri 26 Jan
Australia Day
(observed)
Mon 28 Jan
Good Friday Fri 03 Apr Fri 26 Mar Fri 14 Apr Fri 30 Mar Fri 19 Apr
Easter Saturday Sat 04 Apr Sat 27 Mar Sat 15 Apr Sat 31 Mar Sat 20 Apr
Easter Sunday Sun 05 Apr Sun 28 Mar Sun 16 Apr Sun 01 Apr Sun 21 Apr
Easter Monday Mon 06 Apr Mon 29 Mar Mon 17 Apr Mon 02 Apr Mon 22 Apr
Anzac Day Sat 25 Apr Sun 25 Apr Tue 25 Apr Wed 25 Apr Thu 25 Apr
Anzac Day
(additional)
Mon 26 Apr
Labour Day Mon 04 May Mon 03 May Mon 01 May Mon 07 May Mon 06 May
King's Birthday Mon 05 Oct Mon 04 Oct Mon 02 Oct Mon 01 Oct Mon 07 Oct
Christmas Eve
(partial day)
Thu 24 Dec Fri 24 Dec Sun 24 Dec Mon 24 Dec Tue 24 Dec
Christmas Day Fri 25 Dec Sat 25 Dec Mon 25 Dec Tue 25 Dec Wed 25 Dec
Boxing Day Sat 26 Dec Sun 26 Dec Tue 26 Dec Wed 26 Dec Thu 26 Dec
Christmas
(additional)
Mon 28 Dec Mon 27 Dec
Tue 28 Dec

South Australia (Reference)

2026 2027 2028 2029 2030
New Year's Day Thu 01 Jan Fri 01 Jan Sat 01 Jan Mon 01 Jan Tue 01 Jan
Australia Day Mon 26 Jan Tue 26 Jan Wed 26 Jan Fri 26 Jan
Australia Day
(observed)
Mon 28 Jan
Adelaide Cup Day Mon 09 Mar Mon 08 Mar Mon 13 Mar Mon 12 Mar Mon 11 Mar
Good Friday Fri 03 Apr Fri 26 Mar Fri 14 Apr Fri 30 Mar Fri 19 Apr
Easter Saturday Sat 04 Apr Sat 27 Mar Sat 15 Apr Sat 31 Mar Sat 20 Apr
Easter Sunday Sun 05 Apr Sun 28 Mar Sun 16 Apr Sun 01 Apr Sun 21 Apr
Easter Monday Mon 06 Apr Mon 29 Mar Mon 17 Apr Mon 02 Apr Mon 22 Apr
Anzac Day Sat 25 Apr Sun 25 Apr Tue 25 Apr Wed 25 Apr Thu 25 Apr
King's Birthday Mon 08 Jun Mon 14 Jun Mon 12 Jun Mon 11 Jun Mon 10 Jun
Labour Day Mon 05 Oct Mon 04 Oct Mon 02 Oct Mon 01 Oct Mon 07 Oct
Christmas Eve
(partial day)
Thu 24 Dec Fri 24 Dec Sun 24 Dec Mon 24 Dec Tue 24 Dec
Christmas Day Fri 25 Dec Sat 25 Dec Mon 25 Dec Tue 25 Dec Wed 25 Dec
Proclamation Day Sat 26 Dec Sun 26 Dec
Proclamation and Boxing Day Tue 26 Dec Wed 26 Dec Thu 26 Dec
Proclamation Day
(additional)
Mon 28 Dec Mon 27 Dec
New Year's Eve
(partial day)
Thu 31 Dec Fri 31 Dec Sun 31 Dec Mon 31 Dec Tue 31 Dec

Tasmania (Reference)

2026 2027 2028 2029 2030
New Year's Day Thu 01 Jan Fri 01 Jan Sat 01 Jan Mon 01 Jan Tue 01 Jan
Australia Day Mon 26 Jan Tue 26 Jan Wed 26 Jan Fri 26 Jan
Australia Day
(observed)
Mon 28 Jan
Eight Hours Day Mon 09 Mar Mon 08 Mar Mon 13 Mar Mon 12 Mar Mon 11 Mar
Good Friday Fri 03 Apr Fri 26 Mar Fri 14 Apr Fri 30 Mar Fri 19 Apr
Easter Sunday Sun 05 Apr Sun 28 Mar Sun 16 Apr Sun 01 Apr Sun 21 Apr
Easter Monday Mon 06 Apr Mon 29 Mar Mon 17 Apr Mon 02 Apr Mon 22 Apr
Easter Tuesday
(Government employees only)
Tue 07 Apr Tue 30 Mar Tue 18 Apr Tue 03 Apr Tue 23 Apr
Anzac Day Sat 25 Apr Sun 25 Apr Tue 25 Apr Wed 25 Apr Thu 25 Apr
King's Birthday Mon 08 Jun Mon 14 Jun Mon 12 Jun Mon 11 Jun Mon 10 Jun
Christmas Day Fri 25 Dec Sat 25 Dec Mon 25 Dec Tue 25 Dec Wed 25 Dec
Boxing Day Sat 26 Dec Sun 26 Dec Tue 26 Dec Wed 26 Dec Thu 26 Dec
Christmas
(additional)
Mon 28 Dec Mon 27 Dec
Tue 28 Dec

Victorian (Reference)

2026 2027 2028 2029 2030
New Year's Day Thu 01 Jan Fri 01 Jan Sat 01 Jan Mon 01 Jan Tue 01 Jan
Australia Day Mon 26 Jan Tue 26 Jan Wed 26 Jan Fri 26 Jan
Australia Day
(observed)
Mon 28 Jan
Labour Day Mon 09 Mar Mon 08 Mar Mon 13 Mar Mon 12 Mar Mon 11 Mar
Good Friday Fri 03 Apr Fri 26 Mar Fri 14 Apr Fri 30 Mar Fri 19 Apr
Easter Saturday Sat 04 Apr Sat 27 Mar Sat 15 Apr Sat 31 Mar Sat 20 Apr
Easter Sunday Sun 05 Apr Sun 28 Mar Sun 16 Apr Sun 01 Apr Sun 21 Apr
Easter Monday Mon 06 Apr Mon 29 Mar Mon 17 Apr Mon 02 Apr Mon 22 Apr
Anzac Day Sat 25 Apr Sun 25 Apr Tue 25 Apr Wed 25 Apr Thu 25 Apr
King's Birthday Mon 08 Jun Mon 14 Jun Mon 12 Jun Mon 11 Jun Mon 10 Jun
Friday before AFL Final
(Subject to AFL schedule)
Fri 25 Sep Fri 24 Sep Fri 29 Sep Fri 28 Sep Fri 27 Sep
Melbourne Cup Day Tue 03 Nov Tue 02 Nov Tue 07 Nov Tue 06 Nov Tue 05 Nov
Christmas Day Fri 25 Dec Sat 25 Dec Mon 25 Dec Tue 25 Dec Wed 25 Dec
Boxing Day Sat 26 Dec Sun 26 Dec Tue 26 Dec Wed 26 Dec Thu 26 Dec
Christmas
(additional)
Mon 28 Dec Mon 27 Dec
Tue 28 Dec

Western Australia (Reference)

2026 2027 2028 2029 2030
New Year's Day Thu 01 Jan Fri 01 Jan Sat 01 Jan Mon 01 Jan Tue 01 Jan
Australia Day Mon 26 Jan Tue 26 Jan Wed 26 Jan Fri 26 Jan
Australia Day
(observed)
Mon 28 Jan
Labour Day Mon 02 Mar Mon 01 Mar Mon 06 Mar Mon 05 Mar Mon 04 Mar
Good Friday Fri 03 Apr Fri 26 Mar Fri 14 Apr Fri 30 Mar Fri 19 Apr
Easter Saturday Sat 04 Apr Sat 27 Mar Sat 15 Apr Sat 31 Mar Sat 20 Apr
Easter Sunday Sun 05 Apr Sun 28 Mar Sun 16 Apr Sun 01 Apr Sun 21 Apr
Easter Monday Mon 06 Apr Mon 29 Mar Mon 17 Apr Mon 02 Apr Mon 22 Apr
Anzac Day Sat 25 Apr Sun 25 Apr Tue 25 Apr Wed 25 Apr Thu 25 Apr
Anzac Day
(additional)
Mon 27 Apr Mon 26 Apr
Western Australia Day Mon 01 Jun Mon 07 Jun Mon 05 Jun Mon 04 Jun Mon 03 Jun
King's Birthday Mon 28 Sep Mon 27 Sep Mon 25 Sep Mon 24 Sep Mon 23 Sep
Christmas Day Fri 25 Dec Sat 25 Dec Mon 25 Dec Tue 25 Dec Wed 25 Dec
Boxing Day Sat 26 Dec Sun 26 Dec Tue 26 Dec Wed 26 Dec Thu 26 Dec
Christmas
(additional)
Mon 28 Dec Mon 27 Dec
Tue 28 Dec

ExportToIcs

Export holidays to ICS (iCalendar) format for importing into calendar applications.

National

var ics = await Holidays.ExportToIcs();

snippet source | anchor

State

var ics = await Holidays.ExportToIcs(state);

snippet source | anchor

ExportToJson

Export holidays to JSON format.

National

var json = await Holidays.ExportToJson();

snippet source | anchor

State

var json = await Holidays.ExportToJson(state);

snippet source | anchor

ExportToXml

Export holidays to XML format.

National

var xml = await Holidays.ExportToXml();

snippet source | anchor

State

var xml = await Holidays.ExportToXml(state);

snippet source | anchor

ExportToCsv

Export holidays to CSV format.

National

var csv = await Holidays.ExportToCsv();

snippet source | anchor

State

var csv = await Holidays.ExportToCsv(state);

snippet source | anchor

ExportToExcel

Export holidays to Excel format (.xlsx).

National

var bytes = await Holidays.ExportToExcel();

snippet source | anchor

State

var bytes = await Holidays.ExportToExcel(state);

snippet source | anchor

Dependency Injection API

The above APIs are all static. This means they are not Dependency Injection or test friendly.

HolidayService is an instance based wrapper for the above APIs that can be used in Dependency Injection and is test friendly.

All members are virtual so it can be mocked.

Usage

[Test]
public void Usage()
{
    var holidayService = new HolidayService(TimeProvider.System);
    var holidays = holidayService.ForYears(startYear: 2025, yearCount: 2);
    foreach (var (date, state, name) in holidays)
    {
        Console.WriteLine($"date: {date}, state: {state}, name: {name}");
    }
}

snippet source | anchor

Dependency Injection Usage

[Test]
public void DependencyInjectionUsage()
{
    var services = new ServiceCollection();
    services.AddSingleton<HolidayService>();
    services.AddSingleton(TimeProvider.System);
    services.AddTransient<ClassUsingHolidays>();

    using var provider = services.BuildServiceProvider();
    var service = provider.GetRequiredService<ClassUsingHolidays>();
    service.WriteHolidays();
}

public class ClassUsingHolidays(HolidayService holidayService)
{
    public void WriteHolidays()
    {
        var holidays = holidayService.ForYears(startYear: 2025, yearCount: 2);
        foreach (var (date, state, name) in holidays)
        {
            Console.WriteLine($"date: {date}, state: {state}, name: {name}");
        }
    }
}

snippet source | anchor

Testing

AlwaysHolidayService

AlwaysHolidayService treats every day as a holiday

[Test]
public void AlwaysHolidayServiceUsage()
{
    var service = new AlwaysHolidayService();
    var result = service.ForYears(2023, 1).ToList();

    AreEqual(8 * 365, result.Count); // 8 states * 365 days
    IsTrue(result.All(item => item.name == "Holiday"));
}

snippet source | anchor

NeverHolidayService

NeverHolidayService treats every day as not a holiday

[Test]
public void NeverHolidayServiceUsage()
{
    var service = new NeverHolidayService();
    var result = service.ForYears(2023, 1).ToList();

    IsEmpty(result);

    var date = new Date(2020, 1, 2);
    IsFalse(service.IsNswHoliday(date));
}

snippet source | anchor

Icon

Australia designed by Atterratio Aeternus from The Noun Project.

About

.net lirary for calculating and retrieving public holiday dates in Australia

Resources

License

Code of conduct

Stars

Watchers

Forks

Sponsor this project

 

Contributors