WorkTracker/Services/Festivities/ItalianFestivitySource.cs
2026-02-18 17:11:13 +01:00

46 lines
1.3 KiB
C#

namespace WorkTracker.Services.Festivities;
public sealed class ItalianFestivitySource : IItalianFestivitySource
{
public IReadOnlyCollection<DateOnly> GetFestivities(int year)
{
var easterSunday = GetEasterSunday(year);
var easterMonday = easterSunday.AddDays(1);
return new HashSet<DateOnly>
{
new(year, 1, 1),
new(year, 1, 6),
easterSunday,
easterMonday,
new(year, 4, 25),
new(year, 5, 1),
new(year, 6, 2),
new(year, 8, 15),
new(year, 11, 1),
new(year, 12, 8),
new(year, 12, 25),
new(year, 12, 26)
};
}
private static DateOnly GetEasterSunday(int year)
{
var a = year % 19;
var b = year / 100;
var c = year % 100;
var d = b / 4;
var e = b % 4;
var f = (b + 8) / 25;
var g = (b - f + 1) / 3;
var h = (19 * a + b - d - g + 15) % 30;
var i = c / 4;
var k = c % 4;
var l = (32 + 2 * e + 2 * i - h - k) % 7;
var m = (a + 11 * h + 22 * l) / 451;
var month = (h + l - 7 * m + 114) / 31;
var day = ((h + l - 7 * m + 114) % 31) + 1;
return new DateOnly(year, month, day);
}
}