Sub FirstDayOfIcelandicMonth (MonthName As String, Year As Int) As String
DateTime.DateFormat = "dd/MM/yyyy"
Select Case MonthName
Case "Þorri"
Dim Jan19 As Long = DateTime.DateParse("19/01/" & Year)
Dim DayOfWeek As Int = DateTime.GetDayOfWeek(Jan19)
Dim P As Period = CalculatePeriod(DayOfWeek, 6)
Dim FirstFriday As Long = DateUtils.AddPeriod(Jan19, P)
Return DateTime.Date(FirstFriday) & " (Friday)"
Case "Góa"
Dim Feb18 As Long = DateTime.DateParse("18/02/" & Year)
Dim DayOfWeek As Int = DateTime.GetDayOfWeek(Feb18)
Dim P As Period = CalculatePeriod(DayOfWeek, 1)
Dim FirstSunday As Long = DateUtils.AddPeriod(Feb18, P)
Return DateTime.Date(FirstSunday) & " (Sunday)"
Case "Einmánuður"
Dim Mar20 As Long = DateTime.DateParse("20/03/" & Year)
Dim DayOfWeek As Int = DateTime.GetDayOfWeek(Mar20)
Dim P As Period = CalculatePeriod(DayOfWeek, 3)
Dim FirstTuesday As Long = DateUtils.AddPeriod(Mar20, P)
Return DateTime.Date(FirstTuesday) & " (Tuesday)"
Case "Harpa"
Dim Apr18 As Long = DateTime.DateParse("18/04/" & Year)
Dim DayOfWeek As Int = DateTime.GetDayOfWeek(Apr18)
Dim P As Period = CalculatePeriod(DayOfWeek, 5)
Dim FirstThursday As Long = DateUtils.AddPeriod(Apr18, P)
Return DateTime.Date(FirstThursday) & " (Thursday)"
Case "Skerpla"
Dim May19 As Long = DateTime.DateParse("19/05/" & Year)
Dim DayOfWeek As Int = DateTime.GetDayOfWeek(May19)
Dim P As Period = CalculatePeriod(DayOfWeek, 7)
Dim FirstSaturday As Long = DateUtils.AddPeriod(May19, P)
Return DateTime.Date(FirstSaturday) & " (Saturday)"
Case "Sólmánuður"
Dim Jun18 As Long = DateTime.DateParse("18/06/" & Year)
Dim DayOfWeek As Int = DateTime.GetDayOfWeek(Jun18)
Dim P As Period = CalculatePeriod(DayOfWeek, 2)
Dim FirstMonday As Long = DateUtils.AddPeriod(Jun18, P)
Return DateTime.Date(FirstMonday) & " (Monday)"
Case "Heyannir"
Dim Jul23 As Long = DateTime.DateParse("23/07/" & Year)
Dim DayOfWeek As Int = DateTime.GetDayOfWeek(Jul23)
Dim P As Period = CalculatePeriod(DayOfWeek, 1)
Dim FirstSunday As Long = DateUtils.AddPeriod(Jul23, P)
Return DateTime.Date(FirstSunday) & " (Sunday)"
Case "Tvímánuður"
Dim Aug22 As Long = DateTime.DateParse("22/08/" & Year)
Dim DayOfWeek As Int = DateTime.GetDayOfWeek(Aug22)
Dim P As Period = CalculatePeriod(DayOfWeek, 3)
Dim FirstTuesday As Long = DateUtils.AddPeriod(Aug22, P)
Return DateTime.Date(FirstTuesday) & " (Tuesday)"
Case "Haustmánuður"
Dim Sep20 As Long = DateTime.DateParse("20/09/" & Year)
Dim DayOfWeek As Int = DateTime.GetDayOfWeek(Sep20)
Dim P As Period = CalculatePeriod(DayOfWeek, 5)
Dim FirstThursday As Long = DateUtils.AddPeriod(Sep20, P)
Return DateTime.Date(FirstThursday) & " (Thursday)"
Case "Gormánuður"
Dim Oct21 As Long = DateTime.DateParse("21/10/" & Year)
Dim DayOfWeek As Int = DateTime.GetDayOfWeek(Oct21)
Dim P As Period = CalculatePeriod(DayOfWeek, 7)
Dim FirstSaturday As Long = DateUtils.AddPeriod(Oct21, P)
Return DateTime.Date(FirstSaturday) & " (Saturday)"
Case "Ýlir"
Dim Nov20 As Long = DateTime.DateParse("20/11/" & Year)
Dim DayOfWeek As Int = DateTime.GetDayOfWeek(Nov20)
Dim P As Period = CalculatePeriod(DayOfWeek, 2)
Dim FirstMonday As Long = DateUtils.AddPeriod(Nov20, P)
Return DateTime.Date(FirstMonday) & " (Monday)"
Case "Mörsugur"
Dim Dec20 As Long = DateTime.DateParse("20/12/" & Year)
Dim DayOfWeek As Int = DateTime.GetDayOfWeek(Dec20)
Dim P As Period = CalculatePeriod(DayOfWeek, 4)
Dim FirstWednesday As Long = DateUtils.AddPeriod(Dec20, P)
Return DateTime.Date(FirstWednesday) & " (Wednesday)"
Case Else
Return ""
End Select
End Sub
' DayOfWeek1 = DayOfWeek of the start date
' DayOfWeek2 = DayOfWeek to look for
Sub CalculatePeriod (DayOfWeek1 As Int, DayOfWeek2 As Int) As Period
Dim P As Period
Select Case DayOfWeek2
Case 1 ' Sunday
P.Days = 8 - DayOfWeek1
If P.Days = 7 Then P.Days = 0
Case 2 ' Monday
P.Days = 9 - DayOfWeek1
If P.Days > 6 Then P.Days = P.Days - 7
Case 3 ' Tuesday
If DayOfWeek1 > 3 Then
P.Days = 10 - DayOfWeek1
Else
P.Days = 3 - DayOfWeek1
End If
Case 4 ' Wednesday
If DayOfWeek1 > 4 Then
P.Days = 11 - DayOfWeek1
Else
P.Days = 4 - DayOfWeek1
End If
Case 5 ' Thursday
P.Days = 5 - DayOfWeek1
If P.Days < 0 Then P.Days = 7 + P.Days
Case 6 ' Friday
P.Days = 6 - DayOfWeek1
If P.Days < 0 Then P.Days = DayOfWeek1 + P.Days
Case 7 ' Saturday
P.Days = 7 - DayOfWeek1
If P.Days = 7 Then P.Days = 0
End Select
Return P
End Sub