Is there a way to find the days that constitute a weekend or workweek based on different cultures using the .NET framework? For example, some Muslim countries have a workweek from Sunday through Thursday.
The USA officially adopted the five-day system in 1932, in a bid to counter the unemployment caused by the Great Depression. At around the same time, something similar was happening on the other side of the Atlantic. Henry Ford of the Ford Motor Company introduced a 40-hour week for his workers.
In 1908, the first five-day workweek in the United States was instituted by a New England cotton mill so that Jewish workers would not have to work on the Sabbath from sundown Friday to sundown Saturday.
The weekend is most commonly considered the period between Friday evening and the end of Sunday. More strictly speaking, the weekend is thought to consist of Saturday and Sunday (often regardless of whether the calendar week is considered to begin on Sunday or Monday).
No one had a solution for this so I wrote one. This uses the country to determine if a day is a workday, weekend, or 1/2 workday (Saturday in some countries). There is some ambiguity in this as in Mexico a 1/2 day on Saturday is "customary" but not official. For cases like this, I set it as work time.
This covers everything except 3 provinces in Malaysia, which are different from the rest of Malaysia. AFAIK, CultureInfo.Name does not have a distinct value for those 3 provinces. Most interesting country, Brunei where the weekend is Friday & Sunday, with Saturday a workday.
Code is downloadable as a project at Is it the weekend? Main code below:
using System;
using System.Globalization;
namespace windward
{
/// <summary>
/// Extensions for the CultureInfo class.
/// </summary>
public static class CultureInfoExtensions
{
/// <summary>
/// The weekday/weekend state for a given day.
/// </summary>
public enum WeekdayState
{
/// <summary>
/// A work day.
/// </summary>
Workday,
/// <summary>
/// A weekend.
/// </summary>
Weekend,
/// <summary>
/// Morning is a workday, afternoon is the start of the weekend.
/// </summary>
WorkdayMorning
}
/// <summary>
/// Returns the English version of the country name. Extracted from the CultureInfo.EnglishName.
/// </summary>
/// <param name="ci">The CultureInfo this object.</param>
/// <returns>The English version of the country name.</returns>
public static string GetCountryEnglishName(this CultureInfo ci)
{
string[] parts = ci.EnglishName.Split(new[] {'(', ')'}, StringSplitOptions.RemoveEmptyEntries);
if (parts.Length < 2)
return ci.EnglishName;
parts = parts[1].Split(new[] {','}, StringSplitOptions.RemoveEmptyEntries);
return parts[parts.Length - 1].Trim();
}
/// <summary>
/// Returns the English version of the language name. Extracted from the CultureInfo.EnglishName.
/// </summary>
/// <param name="ci">The CultureInfo this object.</param>
/// <returns>The English version of the language name.</returns>
public static string GetLanguageEnglishName(this CultureInfo ci)
{
string[] parts = ci.EnglishName.Split(new[] {'('}, StringSplitOptions.RemoveEmptyEntries);
return parts[0].Trim();
}
/// <summary>
/// Return if the passed in day of the week is a weekend.
///
/// note: state pulled from http://en.wikipedia.org/wiki/Workweek_and_weekend
/// </summary>
/// <param name="ci">The CultureInfo this object.</param>
/// <param name="day">The Day of the week to return the stat of.</param>
/// <returns>The weekday/weekend state of the passed in day of the week.</returns>
public static WeekdayState IsWeekend(this CultureInfo ci, DayOfWeek day)
{
string[] items = ci.Name.Split(new[] {'-'}, StringSplitOptions.RemoveEmptyEntries);
switch (items[items.Length - 1])
{
case "DZ": // Algeria
case "BH": // Bahrain
case "BD": // Bangladesh
case "EG": // Egypt
case "IQ": // Iraq
case "IL": // Israel
case "JO": // Jordan
case "KW": // Kuwait
case "LY": // Libya
// Northern Malaysia (only in the states of Kelantan, Terengganu, and Kedah)
case "MV": // Maldives
case "MR": // Mauritania
case "NP": // Nepal
case "OM": // Oman
case "QA": // Qatar
case "SA": // Saudi Arabia
case "SD": // Sudan
case "SY": // Syria
case "AE": // U.A.E.
case "YE": // Yemen
return day == DayOfWeek.Thursday || day == DayOfWeek.Friday
? WeekdayState.Weekend
: WeekdayState.Workday;
case "AF": // Afghanistan
case "IR": // Iran
if (day == DayOfWeek.Thursday)
return WeekdayState.WorkdayMorning;
return day == DayOfWeek.Friday ? WeekdayState.Weekend : WeekdayState.Workday;
case "BN": // Brunei Darussalam
return day == DayOfWeek.Friday || day == DayOfWeek.Sunday
? WeekdayState.Weekend
: WeekdayState.Workday;
case "MX": // Mexico
case "TH": // Thailand
if (day == DayOfWeek.Saturday)
return WeekdayState.WorkdayMorning;
return day == DayOfWeek.Saturday || day == DayOfWeek.Sunday
? WeekdayState.Weekend
: WeekdayState.Workday;
}
// most common Saturday/Sunday
return day == DayOfWeek.Saturday || day == DayOfWeek.Sunday ? WeekdayState.Weekend : WeekdayState.Workday;
}
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With