Skip to content

Commit f38ab69

Browse files
authored
Add Anzac Day handling and WA observed rule (#933)
Extract Anzac Day into a dedicated AnzacDay(year) method and add it to the holidaySpecifications list. When ANZAC Day falls on a weekend, create an additional observed holiday for Western Australia using an ObservedRuleSet so WA gets the substitute weekday.
1 parent b2db31f commit f38ab69

1 file changed

Lines changed: 44 additions & 10 deletions

File tree

src/Nager.Date/HolidayProviders/AustraliaHolidayProvider.cs

Lines changed: 44 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -56,12 +56,14 @@ protected override IEnumerable<HolidaySpecification> GetHolidaySpecifications(in
5656

5757
var weekendObservedRuleSet = new ObservedRuleSet
5858
{
59-
Saturday = date => date.AddDays(2), Sunday = date => date.AddDays(1),
59+
Saturday = date => date.AddDays(2),
60+
Sunday = date => date.AddDays(1),
6061
};
6162

6263
var weekendSequenceObservedRuleSet = new ObservedRuleSet
6364
{
64-
Saturday = date => date.AddDays(2), Sunday = date => date.AddDays(2),
65+
Saturday = date => date.AddDays(2),
66+
Sunday = date => date.AddDays(2),
6567
};
6668

6769
var holidaySpecifications = new List<HolidaySpecification>
@@ -112,14 +114,6 @@ protected override IEnumerable<HolidaySpecification> GetHolidaySpecifications(in
112114
SubdivisionCodes = ["AU-TAS"]
113115
},
114116
new HolidaySpecification
115-
{
116-
Id = "ANZACDAY-01",
117-
Date = new DateTime(year, 4, 25),
118-
EnglishName = "Anzac Day",
119-
LocalName = "Anzac Day",
120-
HolidayTypes = HolidayTypes.Public
121-
},
122-
new HolidaySpecification
123117
{
124118
Id = "MAYDAY-01",
125119
Date = firstMondayInMay,
@@ -188,6 +182,7 @@ protected override IEnumerable<HolidaySpecification> GetHolidaySpecifications(in
188182
this.EasterSunday(year),
189183
};
190184

185+
holidaySpecifications.AddRangeIfNotNull(this.AnzacDay(year));
191186
holidaySpecifications.AddRangeIfNotNull(this.LabourDay(year));
192187
holidaySpecifications.AddRangeIfNotNull(this.MonarchBirthday(year));
193188
holidaySpecifications.AddIfNotNull(this.MourningForQueenElizabeth(year));
@@ -215,6 +210,45 @@ private HolidaySpecification EasterSunday(int year)
215210
return easterSunday;
216211
}
217212

213+
private HolidaySpecification[] AnzacDay(int year)
214+
{
215+
var holidayDate = new DateTime(year, 4, 25);
216+
217+
var holiday = new HolidaySpecification
218+
{
219+
Id = "ANZACDAY-01",
220+
Date = holidayDate,
221+
EnglishName = "Anzac Day",
222+
LocalName = "Anzac Day",
223+
HolidayTypes = HolidayTypes.Public
224+
};
225+
226+
if (holidayDate.DayOfWeek == DayOfWeek.Saturday ||
227+
holidayDate.DayOfWeek == DayOfWeek.Sunday)
228+
{
229+
var weekendObservedRuleSet = new ObservedRuleSet
230+
{
231+
Saturday = date => date.AddDays(2),
232+
Sunday = date => date.AddDays(1),
233+
};
234+
235+
var holidayWesternAustralia = new HolidaySpecification
236+
{
237+
Id = "ANZACDAY-02",
238+
Date = holidayDate,
239+
EnglishName = "Anzac Day",
240+
LocalName = "Anzac Day",
241+
HolidayTypes = HolidayTypes.Public,
242+
SubdivisionCodes = ["AU-WA"],
243+
ObservedRuleSet = weekendObservedRuleSet
244+
};
245+
246+
return [holiday, holidayWesternAustralia];
247+
}
248+
249+
return [holiday];
250+
}
251+
218252
private HolidaySpecification[] LabourDay(int year)
219253
{
220254
var firstMondayInMarch = DateHelper.FindDay(year, Month.March, DayOfWeek.Monday, Occurrence.First);

0 commit comments

Comments
 (0)