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;
}