Skip to content

Commit

Permalink
Merge branch 'main' into fix/switzerland-corpus-christi
Browse files Browse the repository at this point in the history
  • Loading branch information
tinohager committed Sep 30, 2024
2 parents b3a41ae + cdc6dbc commit ba4a700
Show file tree
Hide file tree
Showing 2 changed files with 133 additions and 32 deletions.
38 changes: 26 additions & 12 deletions src/Nager.Date/HolidayProviders/ArgentinaHolidayProvider.cs
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,13 @@ protected override IEnumerable<HolidaySpecification> GetHolidaySpecifications(in
{
var easterSunday = this._catholicProvider.EasterSunday(year);

var thirdMondayInAugust = DateHelper.FindDay(year, Month.August, DayOfWeek.Monday, Occurrence.Third);
var secondMondayInOctober = DateHelper.FindDay(year, Month.October, DayOfWeek.Monday, Occurrence.Second);
var mondayObservedRuleSet = new ObservedRuleSet
{
Tuesday = date => date.AddDays(-1),
Wednesday = date => date.AddDays(-2),
Thursday = date => date.AddDays(4),
Friday = date => date.AddDays(3)
};

var holidaySpecifications = new List<HolidaySpecification>
{
Expand All @@ -45,14 +50,16 @@ protected override IEnumerable<HolidaySpecification> GetHolidaySpecifications(in
Date = easterSunday.AddDays(-48),
EnglishName = "Carnival",
LocalName = "Carnaval",
HolidayTypes = HolidayTypes.Public
HolidayTypes = HolidayTypes.Public,
ObservedRuleSet = mondayObservedRuleSet
},
new HolidaySpecification
{
Date = easterSunday.AddDays(-47),
EnglishName = "Carnival",
LocalName = "Carnaval",
HolidayTypes = HolidayTypes.Public
HolidayTypes = HolidayTypes.Public,
ObservedRuleSet = mondayObservedRuleSet
},
new HolidaySpecification
{
Expand Down Expand Up @@ -87,7 +94,8 @@ protected override IEnumerable<HolidaySpecification> GetHolidaySpecifications(in
Date = new DateTime(year, 6, 17),
EnglishName = "Anniversary of the Passing of General Martín Miguel de Güemes",
LocalName = "Paso a la Inmortalidad del General Martín Miguel de Güemes",
HolidayTypes = HolidayTypes.Public
HolidayTypes = HolidayTypes.Public,
ObservedRuleSet = mondayObservedRuleSet
},
new HolidaySpecification
{
Expand All @@ -105,24 +113,27 @@ protected override IEnumerable<HolidaySpecification> GetHolidaySpecifications(in
},
new HolidaySpecification
{
Date = thirdMondayInAugust,
Date = new DateTime(year, 8, 17),
EnglishName = "General José de San Martín Memorial Day",
LocalName = "Paso a la Inmortalidad del General José de San Martín",
HolidayTypes = HolidayTypes.Public
HolidayTypes = HolidayTypes.Public,
ObservedRuleSet = mondayObservedRuleSet
},
new HolidaySpecification
{
Date = secondMondayInOctober,
Date = new DateTime(year, 10, 12),
EnglishName = "Day of Respect for Cultural Diversity",
LocalName = "Día del Respeto a la Diversidad Cultural",
HolidayTypes = HolidayTypes.Public
HolidayTypes = HolidayTypes.Public,
ObservedRuleSet = mondayObservedRuleSet
},
new HolidaySpecification
{
Date = new DateTime(year, 11, 20),
EnglishName = "National Sovereignty Day",
LocalName = "Día de la Soberanía Nacional",
HolidayTypes = HolidayTypes.Public
HolidayTypes = HolidayTypes.Public,
ObservedRuleSet = mondayObservedRuleSet
},
new HolidaySpecification
{
Expand All @@ -138,7 +149,7 @@ protected override IEnumerable<HolidaySpecification> GetHolidaySpecifications(in
LocalName = "Navidad",
HolidayTypes = HolidayTypes.Public
},
this._catholicProvider.GoodFriday("Viernes Santo", year)
this._catholicProvider.GoodFriday("Viernes Santo", year, mondayObservedRuleSet)
};

return holidaySpecifications;
Expand All @@ -149,7 +160,10 @@ public override IEnumerable<string> GetSources()
{
return
[
"https://en.wikipedia.org/wiki/Public_holidays_in_Argentina"
"https://en.wikipedia.org/wiki/Public_holidays_in_Argentina",
"https://www.argentina.gob.ar/normativa/nacional/ley-27399-281835/texto",
"https://www.argentina.gob.ar/normativa/nacional/decreto-52-2017-271094/texto",
"https://www.argentina.gob.ar/normativa/nacional/decreto-1584-2010-174389/actualizacion"
];
}
}
Expand Down
127 changes: 107 additions & 20 deletions src/Nager.Date/HolidayProviders/SwitzerlandHolidayProvider.cs
Original file line number Diff line number Diff line change
Expand Up @@ -74,14 +74,6 @@ protected override IEnumerable<HolidaySpecification> GetHolidaySpecifications(in
HolidayTypes = HolidayTypes.Public
},
new HolidaySpecification
{
Date = new DateTime(year, 1, 2),
EnglishName = "St. Berchtold's Day",
LocalName = "Berchtoldstag",
HolidayTypes = HolidayTypes.Public,
SubdivisionCodes = ["CH-ZH", "CH-BE", "CH-LU", "CH-OW", "CH-GL", "CH-ZG", "CH-FR", "CH-SO", "CH-SH", "CH-TG", "CH-VD", "CH-NE", "CH-GE", "CH-JU"]
},
new HolidaySpecification
{
Date = new DateTime(year, 1, 6),
EnglishName = "Epiphany",
Expand All @@ -98,14 +90,6 @@ protected override IEnumerable<HolidaySpecification> GetHolidaySpecifications(in
SubdivisionCodes = ["CH-NE"]
},
new HolidaySpecification
{
Date = new DateTime(year, 3, 19),
EnglishName = "Saint Joseph's Day",
LocalName = "Josefstag",
HolidayTypes = HolidayTypes.Public,
SubdivisionCodes = ["CH-LU", "CH-UR", "CH-SZ", "CH-NW", "CH-ZG", "CH-GR", "CH-TI", "CH-VS"]
},
new HolidaySpecification
{
Date = new DateTime(year, 5, 1),
EnglishName = "Labour Day",
Expand Down Expand Up @@ -180,8 +164,8 @@ protected override IEnumerable<HolidaySpecification> GetHolidaySpecifications(in
Date = thirdSundayOfSeptember,
EnglishName = "Federal Day of Thanksgiving",
LocalName = "Eidgenössischer Dank-, Buss- und Bettag",
HolidayTypes = HolidayTypes.Public,
SubdivisionCodes = ["CH-ZH", "CH-BE", "CH-LU", "CH-UR", "CH-SZ", "CH-OW", "CH-NW", "CH-GL", "CH-ZG", "CH-FR", "CH-SO", "CH-BS", "CH-BL", "CH-SH", "CH-AR", "CH-AI", "CH-SG", "CH-GR", "CH-AG", "CH-TG", "CH-TI", "CH-VD", "CH-VS", "CH-NE", "CH-JU"]
HolidayTypes = HolidayTypes.Observance,
SubdivisionCodes = ["CH-ZH", "CH-BE", "CH-LU", "CH-SZ", "CH-OW", "CH-NW", "CH-GL", "CH-SO", "CH-BS", "CH-BL", "CH-SH", "CH-SG", "CH-GR"]
},
new HolidaySpecification
{
Expand All @@ -192,16 +176,119 @@ protected override IEnumerable<HolidaySpecification> GetHolidaySpecifications(in
SubdivisionCodes = ["CH-VD"]
},
this._catholicProvider.GoodFriday("Karfreitag", year).SetSubdivisionCodes("CH-ZH", "CH-BE", "CH-LU", "CH-UR", "CH-SZ", "CH-OW", "CH-NW", "CH-GL", "CH-ZG", "CH-FR", "CH-SO", "CH-BS", "CH-BL", "CH-SH", "CH-AR", "CH-AI", "CH-SG", "CH-GR", "CH-AG", "CH-TG", "CH-VD", "CH-NE", "CH-GE", "CH-JU"),
this._catholicProvider.EasterMonday("Ostermontag", year).SetSubdivisionCodes("CH-ZH", "CH-BE", "CH-LU", "CH-UR", "CH-SZ", "CH-OW", "CH-NW", "CH-GL", "CH-ZG", "CH-FR", "CH-SO", "CH-BS", "CH-BL", "CH-SH", "CH-AR", "CH-AI", "CH-SG", "CH-GR", "CH-AG", "CH-TG", "CH-TI", "CH-VD", "CH-NE", "CH-GE", "CH-JU"),
this._catholicProvider.AscensionDay("Auffahrt", year),
this._catholicProvider.WhitMonday("Pfingstmontag", year).SetSubdivisionCodes("CH-ZH", "CH-BE", "CH-LU", "CH-UR", "CH-SZ", "CH-OW", "CH-NW", "CH-GL", "CH-ZG", "CH-FR", "CH-BS", "CH-BL", "CH-SH", "CH-AR", "CH-AI", "CH-SG", "CH-GR", "CH-TG", "CH-TI", "CH-VD", "CH-NE", "CH-GE", "CH-JU"),
};

holidaySpecifications.AddRangeIfNotNull(this.WhitMonday(year));
holidaySpecifications.AddRangeIfNotNull(this.EasterMonday(year));
holidaySpecifications.AddRangeIfNotNull(this.Epiphany(year));
holidaySpecifications.AddIfNotNull(this.BerchtoldsDay(year));
holidaySpecifications.AddRangeIfNotNull(this.SaintJosephsDay(year));
holidaySpecifications.AddRangeIfNotNull(this.CorpusChristi(year));

return holidaySpecifications;
}

private HolidaySpecification[] Epiphany(int year)
{
var englishName = "Epiphany";
var localName = "Heilige Drei Könige";

return
[
new HolidaySpecification
{
Date = new DateTime(year, 1, 6),
EnglishName = englishName,
LocalName = localName,
HolidayTypes = HolidayTypes.Public,
SubdivisionCodes = ["CH-TI"]
},
new HolidaySpecification
{
Date = new DateTime(year, 1, 6),
EnglishName = englishName,
LocalName = localName,
HolidayTypes = HolidayTypes.Observance,
SubdivisionCodes = ["CH-UR", "CH-SZ"]
}
];
}

private HolidaySpecification BerchtoldsDay(int year)
{
var subdivisionCodes = new List<string>(["CH-BE", "CH-FR", "CH-SH", "CH-AG", "CH-TG", "CH-VD"]);

if (new DateTime(year, 12, 25).DayOfWeek == DayOfWeek.Sunday ||
new DateTime(year, 1, 1).DayOfWeek == DayOfWeek.Sunday)
{
subdivisionCodes.Add("CH-NE");
}

return new HolidaySpecification
{
Date = new DateTime(year, 1, 2),
EnglishName = "St. Berchtold's Day",
LocalName = "Berchtoldstag",
HolidayTypes = HolidayTypes.Public,
SubdivisionCodes = [.. subdivisionCodes]
};
}

private HolidaySpecification[] SaintJosephsDay(int year)
{
var englishName = "Saint Joseph's Day";
var localName = "Josefstag";

return
[
new HolidaySpecification
{
Date = new DateTime(year, 3, 19),
EnglishName = englishName,
LocalName = localName,
HolidayTypes = HolidayTypes.Public,
SubdivisionCodes = ["CH-SZ", "CH-VS"]
},
new HolidaySpecification
{
Date = new DateTime(year, 3, 19),
EnglishName = englishName,
LocalName = localName,
HolidayTypes = HolidayTypes.Observance,
SubdivisionCodes = ["CH-LU", "CH-UR", "CH-NW", "CH-TI"]
}
];
}

private HolidaySpecification[] EasterMonday(int year)
{
var localName = "Ostermontag";

var specificationPublic = this._catholicProvider.EasterMonday(localName, year).SetSubdivisionCodes("CH-ZH", "CH-BE", "CH-GL", "CH-FR", "CH-BS", "CH-BL", "CH-SH", "CH-AR", "CH-AI", "CH-SG", "CH-GR", "CH-AG", "CH-TG", "CH-TI", "CH-VD", "CH-GE", "CH-JU");
var specificationObservance = this._catholicProvider.EasterMonday(localName, year).SetSubdivisionCodes("CH-UR", "CH-SZ", "CH-OW").SetHolidayTypes(HolidayTypes.Observance);

return
[
specificationPublic,
specificationObservance
];
}

private HolidaySpecification[] WhitMonday(int year)
{
var localName = "Pfingstmontag";

var specificationPublic = this._catholicProvider.WhitMonday(localName, year).SetSubdivisionCodes("CH-ZH", "CH-BE", "CH-GL", "CH-FR", "CH-BS", "CH-BL", "CH-SH", "CH-AR", "CH-AI", "CH-SG", "CH-GR", "CH-AG", "CH-TG", "CH-VD", "CH-GE", "CH-JU");
var specificationObservance = this._catholicProvider.WhitMonday(localName, year).SetSubdivisionCodes("CH-UR", "CH-SZ", "CH-OW", "CH-TI").SetHolidayTypes(HolidayTypes.Observance);

return
[
specificationPublic,
specificationObservance
];
}

private HolidaySpecification[] CorpusChristi(int year)
{
var localName = "Fronleichnam";
Expand Down

0 comments on commit ba4a700

Please sign in to comment.