Maciej Los
Ну, нет никакого "общего списка праздников". Это зависит от страны (национальные, государственные праздники) и религии. Видеть: Национальный день - Википедия[^].
Самый простой способ определить, является ли текущий день праздником, - это определить их список. Обратите внимание, что некоторые праздники зависят от Пасхи...
Sub Main
Dim startDate As DateTime = New DateTime(2019,1,1)
Dim ThisYear As List(Of KeyValuePair(Of DateTime, Boolean)) = Enumerable.Range(0, 365) _
.Select(Function(x) New KeyValuePair(Of DateTime, Boolean)(startDate.AddDays(x), IsHoliday(startDate.AddDays(x)))) _
.ToList()
'list is ready to use...
End Sub
' Define other methods and classes here
Function Easter(lyear As Long) As DateTime
Dim C As Long, N As Long, K As Long, i As Long, J As Long, L As Long, M As Long, D As Long
C = lyear \ 100
N = lyear - 19 * (lyear \ 19)
K = (C - 17) \ 25
i = C - C \ 4 - (C - K) \ 3 + 19 * N + 15
i = i - 30 * (i \ 30)
i = i - (i \ 28) * (1 - (i \ 28) * (29 \ (i + 1)) * ((21 - N) \ 11))
J = lyear + lyear \ 4 + i + 2 - C + C \ 4
J = J - 7 * (J \ 7)
L = i - J
M = 3 + (L + 40) \ 44
D = L + 28 - 31 * (M \ 4)
Return New DateTime(lyear, M, D)
End Function
Function IsHoliday(ByVal thisday As DateTime) As Boolean
Dim holidays As List(Of DateTime) = New List(Of DateTime)
holidays.Add(New DateTime(thisday.Year, 1, 1)) 'New Year
holidays.Add(New DateTime(thisday.Year, 1, 6)) 'Epiphany holiday
holidays.Add(Easter(thisday.Year)) 'Easter
holidays.Add(Easter(thisday.Year).AddDays(1)) 'Easter Monday
holidays.Add(Easter(thisday.Year).AddDays(49)) 'Whit Monday (48 days after Easter)
holidays.Add(New DateTime(thisday.Year, 5, 1)) '1 May Labour Day
holidays.Add(New DateTime(thisday.Year, 5, 3)) 'Constitution of 3th May - polish National Holiday
holidays.Add(Easter(thisday.Year).AddDays(60)) 'Corpus Christi
holidays.Add(New DateTime(thisday.Year, 8, 15)) 'Assumption of Mary
holidays.Add(New DateTime(thisday.Year, 11, 1)) 'All Saints Day
holidays.Add(New DateTime(thisday.Year, 12, 25)) 'Christmas Day
holidays.Add(New DateTime(thisday.Year, 12, 26)) 'a second day of Christmas
Return holidays.Contains(thisday)
End Function
Примечание:
Easter
функция выглядит некрасиво, но работает отлично!
Richard Deeming
Я думаю, что вы в порядке - ОП еще не думал о странах, где выходные дни-пятница + суббота, а не суббота + воскресенье. :)