logo  How To find Gregorian Date for Hebrew Calendar Festival
This Chapter
Date Functions
Advent
Bank Hol (UK)
Chinese Calendar
Easter
Easter-Orthodox
Epoch Dates
Hebrew Calendar
Iso-Week Calendar
Nearest Weekday
Week Of Month
Other Dates
Chapters
Home Page
Colours, RGB
Computer Specifications
Dates&Times
Disk Drives
Files
Folders
GPS and OS Ref
VB.Net Forms
Image Files
If & Select
List/Array
Mathematics
NuGet
Sound
String Functions
Sun and Moon
User Controls
Validation
DigitalDan Sites
My Other Sites
Contact Site

Note
Some pages
may contain
inaccuracies
Hits=5
Hebrew festival dates are usually based on the Hebrew Calendar. This page provides functions for calculating the Gregorian dates of various Hebrew festivals. Converting Hebrew dates to Gregorian could involve complex mathematics, this can be avoided by using calender conversion routines buit into the .NET framework. (They are part of all recent releases of VB.Net and will not need any external packages or additional references.)
 
The following comments indicate some potential problems linked to Hebrew-Gregorian date conversions. As with all date conversion functions, you are advised to check results against a reliable source and ensure they match the religious, traditional and cultural expectations of your target audience.
Get Gregorian Date relating to a Hebrew Date

Public Shared Function Hebrew_To_Gregorian(yyyy_Heb As Integer, mm_Heb As Integer, dd_Heb As Integer) As Date
 Dim date_Greg As Date
 Try
  Dim calendar_Heb As New Globalization.HebrewCalendar
  Dim calendar_Greg As New Globalization.GregorianCalendar
  Dim hebrewDate As Date = calendar_Heb.ToDateTime(yyyy_Heb, mm_Heb, dd_Heb, 12, 0, 0, 0, 0)
  date_Greg = New Date(calendar_Greg.GetYear(hebrewDate), calendar_Greg.GetMonth(hebrewDate), calendar_Greg.GetDayOfMonth(hebrewDate), 12, 0, 0, 0)
 Catch ex As Exception
  date_Greg = New Date(1800, 1, 1, 0, 0, 0, 0, 0) ' invalid date, returning an obviously incorrect value
 End Try
 ' Caution - Hebrew date start at dusk not midnight!
 Return date_Greg '.AddDays(-1)'
End Function
  
 
Get Hebrew Date relating to a Gregorian Date

Public Shared Function Gregorian_To_Hebrew(date_Greg As Date) As HebrewDate
 ' Unlike Gregorian Month numbers, Hebrew month numbers are not constant.
 ' During a Leap Year, all month numbers after the leap Month (Adur2) will increase by 1
 ' To avoid month number confusion, the returned structure includes the month name as a string and enum
 Dim ret As HebrewDate
 Dim dat As New Date(date_Greg.Year, date_Greg.Month, date_Greg.Day, 12, 0, 0, 0, 0)
 ' starting from midday(Greg) to avoid clock-change issues etc.
 Dim calendar_Heb As New Globalization.HebrewCalendar
 ret.yyyy_Heb = calendar_Heb.GetYear(dat)
 ret.mm_Heb = calendar_Heb.GetMonth(dat)
 ret.dd_Heb = calendar_Heb.GetDayOfMonth(dat)
 Dim hebrewDate As Date = calendar_Heb.ToDateTime(ret.yyyy_Heb, ret.mm_Heb, ret.dd_Heb, 12, 0, 0, 0)
'
 Dim HebrewMonthsNormal As String() = {"", "Tishrei", "Cheshvan", "Kislev", "Tevet", "Shevat", "Adar", "Nissan", "Iyar", "Sivan", "Tamuz", "Av", "Elul"}
 Dim HebrewMonthsLeap As String() = {"", "Tishrei", "Cheshvan", "Kislev", "Tevet", "Shevat", "Adar", "Adar2", "Nissan", "Iyar", "Sivan", "Tamuz", "Av", "Elul"}
 If calendar_Heb.IsLeapYear(ret.yyyy_Heb) Then
  ret.monthName_Eng = HebrewMonthsLeap(ret.mm_Heb)
 Else
  ret.monthName_Eng = HebrewMonthsNormal(ret.mm_Heb)
 End If
 ret.monthName_Heb = hebrewDate.ToString("MMMM", CultureInfo.CreateSpecificCulture("he-IL"))
 Return ret
End Function
'
Public Structure HebrewDate
 Dim yyyy_Heb As Integer
 Dim mm_Heb As Integer
 Dim dd_Heb As Integer
 Dim monthName_Heb As String
 Dim monthName_Eng As String
End Structure
  
 
Convert Hebrew Month name to VB.Net Hebrew Month Number
Some Hebrew years have 12 months, others have 13. In a Hebrew leap year, all months after Adur are numbererd 1 more than in a normal year. This function resolves name to dotnet month number.

Public Shared Function HebrewMonthName_To_Number(yyyy_Heb As Integer, MMM_Heb As String) As Integer
 ' Expects English version of the Hebrew month name e.g ADAR2. Will tolerate minor spelling variations
 ' Unlike Gregorian Month numbers, Hebrew month numbers are not constant.
 ' During a Leap Year, all month numbers after the leap Month (Adar2) will increase by 1
 ' This function coverts a month name into the month number for that name/year.
 ' Function returns 0 when month could not be found e.g. Adur2 in non leap year
 Dim FirstMonths() As String = {"ZZ", "TI", "CH", "KI", "TE", "SH", "AD"}
 Dim LastMonths() As String = {"NI", "IY", "SI", "TA", "AV", "EL"}
 Dim monthNumber As Integer
 If MMM_Heb.Length < 2 Then Return 0
 MMM_Heb = MMM_Heb.ToUpper
 If Mid(MMM_Heb, 1, 1) = "A" AndAlso MMM_Heb.Contains("2"c) Then MMM_Heb = "A2"
 If Mid(MMM_Heb, 1, 1) = "A" AndAlso MMM_Heb.Contains("II") Then MMM_Heb = "A2"
 If MMM_Heb.Contains("LEAP") Then MMM_Heb = "A2"
 MMM_Heb = Mid(MMM_Heb, 1, 2).ToUpper
 Dim calendar_Heb As New Globalization.HebrewCalendar
 Dim ListHebrewMonths As List(Of String) = FirstMonths.ToList
 If calendar_Heb.IsLeapYear(yyyy_Heb) Then ListHebrewMonths.Add("A2")
 If calendar_Heb.IsLeapYear(yyyy_Heb) = False AndAlso MMM_Heb = "A2" Then MMM_Heb = "AD"
 ListHebrewMonths.AddRange(LastMonths.ToList)
 monthNumber = ListHebrewMonths.IndexOf(MMM_Heb)
 If monthNumber < 1 Then monthNumber = 0
 Return monthNumber
End Function
  
 
Calculating Specific Hebrew Event Dates
Important - Some dates wil vary slightly according to religions variations, starting after Gregorian-Midnight or regional issues (often 1 day late in Jerusalem etc.)

Private Shared Function AsaraBTevet(yyyy_Hebrew As Integer) As Date
 Return Hebrew_To_Gregorian(yyyy_Hebrew, HebrewMonthName_To_Number(yyyy_Hebrew, "Tevet"), 10)
End Function

Private Shared Function Chanukah_Start(yyyy_Hebrew As Integer) As Date
 Return Hebrew_To_Gregorian(yyyy_Hebrew + 1, HebrewMonthName_To_Number(yyyy_Hebrew, "Kislev"), 25).AddDays(-1)
End Function

Private Shared Function LagBaOmer(yyyy_Hebrew As Integer) As Date
 Return Hebrew_To_Gregorian(yyyy_Hebrew + 1, HebrewMonthName_To_Number(yyyy_Hebrew + 1, "Iyyar"), 18)
End Function

Private Shared Function PesachStart(yyyy_Hebrew As Integer) As Date
 Return Hebrew_To_Gregorian(yyyy_Hebrew, HebrewMonthName_To_Number(yyyy_Hebrew, "Nisan"), 15)
 ' Some texts reference 14 Nisan (slaughtering of the lamb) but the feast is linked to 15 Nisan
End Function

Private Shared Function Purim(yyyy_Hebrew As Integer) As Date
 Return Hebrew_To_Gregorian(yyyy_Hebrew, HebrewMonthName_To_Number(yyyy_Hebrew, "Adar2"), 14).ToString("ddd dd MM yyyy")
 ' In Jerusalem etc., Purim could be on 15 Adar insteaed of European 14 Adar
 ' Adar2 references Adar in normal years and Adar2 in leap years
End Function

Private Shared Function RoshHasganah(yyyy_Hebrew As Integer) As Date
 Return Hebrew_To_Gregorian(yyyy_Hebrew, HebrewMonthName_To_Number(yyyy_Hebrew, "Tishri"), 1).ToString("ddd dd MM yyyy")
End Function

Private Shared Function SavuotStart(yyyy_Hebrew As Integer) As Date
 Return Hebrew_To_Gregorian(yyyy_Hebrew, HebrewMonthName_To_Number(yyyy_Hebrew, "Sivan"), 6).ToString("ddd dd MM yyyy")
End Function

Private Shared Function ShivahAsarBTammuz(yyyy_Hebrew As Integer) As Date
 Return Hebrew_To_Gregorian(yyyy_Hebrew, HebrewMonthName_To_Number(yyyy_Hebrew, "Tammuz"), 17).ToString("ddd dd MM yyyy")
End Function

Private Shared Function ShmininAtzeret(yyyy_Hebrew As Integer) As Date
 Return Hebrew_To_Gregorian(yyyy_Hebrew, HebrewMonthName_To_Number(yyyy_Hebrew, "Tishri"), 22).ToString("ddd dd MM yyyy")
End Function

Private Shared Function SimchatTorah(yyyy_Hebrew As Integer) As Date
 Return Hebrew_To_Gregorian(yyyy_Hebrew, HebrewMonthName_To_Number(yyyy_Hebrew, "Tishri"), 23).ToString("ddd dd MM yyyy")
End Function

Private Shared Function SukkotStart(yyyy_Hebrew As Integer) As Date
 Return Hebrew_To_Gregorian(yyyy_Hebrew, HebrewMonthName_To_Number(yyyy_Hebrew, "Tishri"), 15).ToString("ddd dd MM yyyy")
End Function

Private Shared Function TaanitBechorot(yyyy_Hebrew As Integer) As Date
 Return Hebrew_To_Gregorian(yyyy_Hebrew, HebrewMonthName_To_Number(yyyy_Hebrew, "Nisan"), 14).ToString("ddd dd MM yyyy")
End Function

Private Shared Function TaanitEster(yyyy_Hebrew As Integer) As Date
 Dim ret as Date = Hebrew_To_Gregorian(yyyy_Hebrew, HebrewMonthName_To_Number(yyyy_Hebrew, "Adar2"), 13)
 ' Apply Postponement rule
 If ret.DayOfWeek = DayOfWeek.Saturday Then ret = ret.AddDays(-2)
 Return ret
End Function

Private Shared Function TishaBAv(yyyy_Hebrew As Integer) As Date
 Dim ret as Date = Hebrew_To_Gregorian(yyyy_Hebrew, HebrewMonthName_To_Number(yyyy_Hebrew, "Av"), 9)
 ' Apply Postponement rule
 If ret.DayOfWeek = DayOfWeek.Saturday Then ret = ret.AddDays(1)
 Return ret
End Function

Private Shared Function TuBAv(yyyy_Hebrew As Integer) As Date
 Return Hebrew_To_Gregorian(yyyy_Hebrew, HebrewMonthName_To_Number(yyyy_Hebrew, "Av"), 15)
End Function

Private Shared Function TuBishvat(yyyy_Hebrew As Integer) As Date
 Return Hebrew_To_Gregorian(yyyy_Hebrew, HebrewMonthName_To_Number(yyyy_Hebrew, "Shevat"), 15)
End Function

Private Shared Function TzomGedaliah(yyyy_Hebrew As Integer) As Date
 Dim ret As Date = Hebrew_To_Gregorian(yyyy_Hebrew, HebrewMonthName_To_Number(yyyy_Hebrew, "Tishri"), 3)
 ' Apply Postponement rule
 If ret.DayOfWeek = DayOfWeek.Saturday Then ret = ret.AddDays(1)
 Return ret
End Function

Private Shared Fucntion TzomTammuz(yyyy_Hebrew As Integer) As Date
 Dim ret As Date = Hebrew_To_Gregorian(yyyy_Hebrew, HebrewMonthName_To_Number(yyyy_Hebrew, "Tammuz"), 17)
 ' Apply Postponement rule
 If ret.DayOfWeek = DayOfWeek.Saturday Then ret = ret.AddDays(1)
 Return ret
End Function

Private Shared Function YomKippur(yyyy_Hebrew As Integer) As Date
 Return Hebrew_To_Gregorian(yyyy_Hebrew, HebrewMonthName_To_Number(yyyy_Hebrew, "Tishri"), 10).ToString("ddd dd MM yyyy")
End Function
  
 

DigitalDan.co.uk