Jag skulle behöva veta om en viss dag är en svensk helgdag eller inte om jag t ex anger ett datum. Jag har några funktioner skrivet i vb.net. Inte så jättesnyggt då jag använt mig av strängar istället för datum. Hoppas det kan vara till någon nytta ändå. Hej!Är en viss dag en helgdag?
    
    
Finns det någon färdig klass som räknar ut detta? Kan man kanske använda sig av outlook för att hämta ett värde?
Tacksam för svar.Sv: Är en viss dag en helgdag?
    
    
    Private Function Nyårsdagen(ByVal strYear As String) As String
        Nyårsdagen = strYear + "-01-01"
    End Function
    Private Function Trettondagen(ByVal strYear As String) As String
        Trettondagen = strYear + "-01-06"
    End Function
    Private Function Långfredagen(ByVal strYear As String) As String
        Dim datePåskdagen As Date
        datePåskdagen = CDate(Påskdagen(strYear))
        Långfredagen = DateAdd("d", -2, datePåskdagen)
    End Function
    Private Function Påskdagen(ByVal strYear As String) As String
        Dim strDay As String
        Dim y, g, c, x, z, d, e, n, p
        y = CDbl(strYear)
        g = (y Mod 19) + 1
        c = Int((y / 100) + 1)
        x = Int((3 * c / 4) - 12)
        z = Int(((8 * c + 5) / 25) - 5)
        d = Int((5 * y / 4) - x - 10)
        e = (11 * g + 20 + z - x) Mod 30
        If e = 25 And g > 11 Or e = 24 Then e = e + 1
        n = 44 - e
        If n < 21 Then n = n + 30
        p = n + 7 - ((d + n) Mod 7)
        If p > 31 Then
            strDay = CStr(p - 31)
            If Len(strDay) = 1 Then strDay = "0" + strDay
            Påskdagen = strYear + "-04-" + strDay
        Else
            Påskdagen = strYear + "-03-" + CStr(p)
        End If
    End Function
    Private Function AnnandagPåsk(ByVal strYear As String) As String
        Dim datePåskdagen As Date
        datePåskdagen = CDate(Påskdagen(strYear))
        AnnandagPåsk = DateAdd("d", 1, datePåskdagen)
    End Function
    Private Function FörstaMaj(ByVal strYear As String) As String
        FörstaMaj = strYear + "-05-01"
    End Function
    Private Function KristiHimmelsfärdsdagen(ByVal strYear As String) As String
        Dim datePåskdagen As Date
        datePåskdagen = CDate(Påskdagen(strYear))
        KristiHimmelsfärdsdagen = DateAdd("d", 39, datePåskdagen)
    End Function
    Private Function Nationaldagen(ByVal strYear As String) As String
        Nationaldagen = strYear + "-06-06"
    End Function
    Private Function Midsommarafton(ByVal strYear As String) As String
        'Midsommarafton infaller alltid Fredagen mellan den 19-25 juni.
        Dim i As Byte
        Dim loopdatum
        loopdatum = strYear & "-06-19"
        For i = 19 To 25
            If Weekday(strYear + "-06-" + CStr(i), vbMonday) = 5 Then
                Midsommarafton = strYear + "-06-" + CStr(i)
                Exit For
            End If
        Next i
    End Function
    Private Function Julafton(ByVal strYear As String) As String
        Julafton = strYear + "-12-24"
    End Function
    Private Function Juldagen(ByVal strYear As String) As String
        Juldagen = strYear + "-12-25"
    End Function
    Private Function AnnandagJul(ByVal strYear As String) As String
        AnnandagJul = strYear + "-12-26"
    End Function
    Private Function Nyårsafton(ByVal strYear As String) As String
        Nyårsafton = strYear + "-12-31"
    End Function
I de fall då man vill veta ifall det är en lördag eller söndag kan man göra så här:
     If datDate.DayOfWeek = DayOfWeek.Saturday Then Return True
     If datDate.DayOfWeek = DayOfWeek.Sunday Then Return True
    Sv:Är en viss dag en helgdag?
    
    
Jag har följande kod:
(tar tacksamt emot synpunkt på förbättringar etc)
public static bool IsHoliday(DateTime D,out string strDayName)
		{
			//Kolla om det angivna datumet är en helgdag
			strDayName = "";		
			if (D.Month == 1 && D.Day == 1)
			{
				strDayName = "Nyårsdagen";
				return true;
			}
			if (D.Month == 1 && D.Day == 6)
			{
				strDayName = "Trettondagen";
				return true;
			}
   
			
			//************************************************************************
			//
			//     De som har med påsk att göra...
			//
			
   
			if (D == EasterDay(D.Year).AddDays(-2))
			{
				strDayName = "Långfredag";
				return true;
			}
			if (D == EasterDay(D.Year))
			{
				strDayName = "Påskdagen";//' Påskdagen - iofs alltid på en söndag...
				return true;
			}
			
			if (D == EasterDay(D.Year).AddDays(1))
			{
				strDayName = "Annandag påsk";
				return true;
			}
			
			if (D == EasterDay(D.Year).AddDays(39))
			{
				strDayName = "Kristi himelsfärd";
				//return false;//Är inte längre helgdag;
                return true;
			}
			if (D == EasterDay(D.Year).AddDays(50))
			{
				strDayName = "Annandag pingst";
				if (D.Year >= 2005)
					return false;//Är inte längre helgdag
				else
					return true;
			}
   			
			//*************************************************************************
   
			if (D.Month == 5 && D.Day  == 1)
			{
				strDayName = "1:a Maj";
				return true;
			}
			if (D.Month == 6 && D.Day == 6)
			{
				strDayName = "Nationaldagen";
				if (D.Year >= 2005)
					return true;//Är nu helgdag
				else
					return false;
			}
   
			// Midsommarafton fredag 19-25 juni, Midsommardagen lördag 20-26 juni
			// Tveksamt om midsommarafton är en helgdag...
			if (D.Month == 6)
			{
				if (D.Day >= 19 && D.Day <= 25 && (int)D.DayOfWeek == 5)
				{
					strDayName = "Midsommarafton";
					return true;
				}
				if (D.Day >= 20 && D.Day <= 26 && (int)D.DayOfWeek == 6)
				{
					strDayName = "Midsommarafton";
					return true;
				}
			}
    
			if (D.Month == 12 && D.Day == 24)
			{
				strDayName = "Julafton";
				return true;
			}
   
			if (D.Month == 12 && D.Day == 26)
			{
				strDayName = "Annandag jul";
				return true;
			}
    
			// Alla Helgons Dag lördag 31 okt - 6 nov
			if (D.Month == 10)
			{
				if (D.Day >= 31 && (int)D.DayOfWeek == 6)
				{
					//Är en Lördag
					strDayName = "Alla Helgons dag";
					return true;
				}
			}
			else if (D.Month == 11)
			{
				if (D.Day <= 6 && (int)D.DayOfWeek == 6)
				{
					strDayName = "Alla Helgons dag";
					return true;
				}
			}    
    
		return false;
	}
public static DateTime EasterDay(int iYear)
		{
			// Räkna ut vilken dag påskdagen infaller det angivna året (4 siffror, t.ex. 2001)
			int Y = 0;
			int iDay = 0;
			int iMonth = 0;
			int A,b,C,D,E;
			DateTime Datum = new DateTime();
			Y = iYear;
			if (Y < 100) Y = Y + 1900;
			if (Y < 1950) Y = Y + 100;
		
			A = Y % 19;
			b = Y % 4;
			C = Y % 7;
			D = (19 * A + 24) % 30;
			E = ((2 * b) + (4 * C) + (6 * D) + 5) % 7;
			iDay = 22 + D + E;
			if (iDay == 57) iDay = iDay - 7;
			if (iDay == 56 && D == 28 && E == 6 && A > 10) iDay = iDay - 7;
			if (iDay > 31)
			{
				iDay = iDay - 31;
				iMonth = 4;
			}
			else
			{
				iMonth = 3;
			}   
			
						
			Datum = DateTime.Parse((iYear % 100) +"-"+iMonth.ToString() + "-" + iDay.ToString());
			return Datum;
		}