Skip to content

Commit

Permalink
USA 2021: Add Juneteenth federal holiday
Browse files Browse the repository at this point in the history
  • Loading branch information
Martin Willey committed Jun 18, 2021
1 parent 4da5596 commit 50dcfbe
Show file tree
Hide file tree
Showing 4 changed files with 52 additions and 5 deletions.
6 changes: 3 additions & 3 deletions src/PublicHoliday/Properties/AssemblyInfo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Martin Willey")]
[assembly: AssemblyProduct("Holiday")]
[assembly: AssemblyCopyright("Copyright © Martin Willey 2020")]
[assembly: AssemblyCopyright("Copyright © Martin Willey 2021")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]

Expand All @@ -32,5 +32,5 @@
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("2.4.0.0")]
[assembly: AssemblyFileVersion("2.4.0.0")]
[assembly: AssemblyVersion("2.5.0.0")]
[assembly: AssemblyFileVersion("2.5.0.0")]
5 changes: 3 additions & 2 deletions src/PublicHoliday/PublicHoliday.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,8 @@
2.1.0: South Africa added (thanks @cltw666)
2.2.0: Japan 2020 error (thanks @overstimulated)
2.3.0: UK 2022 Queen's Platinum Jubilee
2.4.0: Scotland, Northern Island holidays (thanks @stuart-lawrence)</PackageReleaseNotes>
2.4.0: Scotland, Northern Island holidays (thanks @stuart-lawrence)
2.5.0: US 2021 Juneteenth added</PackageReleaseNotes>
<PackageProjectUrl>https://github.com/martinjw/Holiday</PackageProjectUrl>
<PackageLicenseUrl>http://opensource.org/licenses/MIT</PackageLicenseUrl>
<RepositoryType>git</RepositoryType>
Expand All @@ -31,7 +32,7 @@
<GenerateAssemblyCopyrightAttribute>false</GenerateAssemblyCopyrightAttribute>
<GenerateAssemblyVersionAttribute>false</GenerateAssemblyVersionAttribute>
<GenerateAssemblyFileVersionAttribute>false</GenerateAssemblyFileVersionAttribute>
<Version>2.4.0</Version>
<Version>2.5.0</Version>
</PropertyGroup>
<PropertyGroup>
<FrameworkPathOverride Condition="'$(TargetFramework)' == 'net35'">C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v3.5\Profile\Client</FrameworkPathOverride>
Expand Down
28 changes: 28 additions & 0 deletions src/PublicHoliday/USAPublicHoliday.cs
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,18 @@ public static Holiday MemorialDay(int year)
return new Holiday(hol, hol);
}

/// <summary>
/// 19th June
/// </summary>
/// <param name="year">The year.</param>
/// <returns></returns>
public static Holiday Juneteenth(int year)
{
var hol = new DateTime(year, 6, 19);
var observed = FixWeekend(hol);
return new Holiday(hol, observed);
}

/// <summary>
/// Independence Day
/// </summary>
Expand Down Expand Up @@ -153,6 +165,10 @@ public override IList<DateTime> PublicHolidays(int year)
bHols.Add(MartinLutherKing(year)); // Third Monday in January
bHols.Add(PresidentsDay(year)); //Third Monday in February
bHols.Add(MemorialDay(year)); //Last Monday in May
if (year >= 2021)
{
bHols.Add(Juneteenth(year)); //19th June, from 2021
}
bHols.Add(IndependenceDay(year)); //4 July
bHols.Add(LaborDay(year)); //First Monday in September
bHols.Add(ColumbusDay(year)); //Second Monday in October
Expand All @@ -174,6 +190,10 @@ public override IList<Holiday> PublicHolidaysInformation(int year)
bHols.Add(MartinLutherKing(year)); // Third Monday in January
bHols.Add(PresidentsDay(year)); //Third Monday in February
bHols.Add(MemorialDay(year)); //Last Monday in May
if (year >= 2021)
{
bHols.Add(Juneteenth(year)); //19th June, from 2021
}
bHols.Add(IndependenceDay(year)); //4 July
bHols.Add(LaborDay(year)); //First Monday in September
bHols.Add(ColumbusDay(year)); //Second Monday in October
Expand All @@ -195,6 +215,10 @@ public override IDictionary<DateTime, string> PublicHolidayNames(int year)
bHols.Add(MartinLutherKing(year), "Martin Luther King Day"); // Third Monday in January
bHols.Add(PresidentsDay(year), "President's Day"); //Third Monday in February
bHols.Add(MemorialDay(year), "Memorial Day"); //Last Monday in May
if (year >= 2021)
{
bHols.Add(Juneteenth(year), "Juneteenth"); //19th June, from 2021
}
bHols.Add(IndependenceDay(year), "Independence Day"); //4 July
bHols.Add(LaborDay(year), "Labor Day"); //First Monday in September
bHols.Add(ColumbusDay(year), "Columbus Day"); //Second Monday in October
Expand Down Expand Up @@ -230,6 +254,10 @@ public override bool IsPublicHoliday(DateTime dt)
if (MemorialDay(year) == date)
return true;
break;
case 6:
if (year >= 2021 && Juneteenth(year) == date)
return true;
break;
case 7:
if (IndependenceDay(year) == date)
return true;
Expand Down
18 changes: 18 additions & 0 deletions tests/PublicHolidayTests/TestUSPublicHoliday.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System;
using System.Linq;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using PublicHoliday;

Expand Down Expand Up @@ -207,6 +208,23 @@ public void TestNextWorkingDay()
Assert.AreEqual(new DateTime(1999, 11, 26), result);
}

[TestMethod]
public void TestJuneteenth2021()
{
var juneteenth = new DateTime(2021, 6, 19);
var result = USAPublicHoliday.Juneteenth(2021);
Assert.AreEqual(juneteenth, result.HolidayDate);

var federalHolidays = new USAPublicHoliday().PublicHolidaysInformation(2021);
//19 June 2021 is Saturday, so would normally be observed on Friday
var june19 = federalHolidays.FirstOrDefault(x => x.HolidayDate == juneteenth);
Assert.IsNotNull(june19);

//Was made a federal holiday in 2021, so it should not appear in 2020 list (although many states and companies observed it)
federalHolidays = new USAPublicHoliday().PublicHolidaysInformation(2020);
june19 = federalHolidays.FirstOrDefault(x => x.HolidayDate == juneteenth);
Assert.IsNull(june19);
}

[TestMethod]
public void TestNextWorkingDayColumbus()
Expand Down

0 comments on commit 50dcfbe

Please sign in to comment.