Public Shared Function IranianIslamicDate(ByVal inDate As Date) As Date
Dim iFYear, iFDay, iFMonth, iFDayOfYear, aIFMonthDays(), iNumDayOfYear, iDayOfYear, iYear As Int32
aIFMonthDays = New Int32() {31, 31, 31, 31, 31, 31, 30, 30, 30, 30, 30, 29}
iNumDayOfYear = 365
iYear = Year(inDate)
iDayOfYear = DatePart(Microsoft.VisualBasic.DateInterval.DayOfYear, inDate)
If Date.IsLeapYear(iYear - 1) Then
iNumDayOfYear = 366
aIFMonthDays(11) = 30
End If
If (iDayOfYear > 79) Then
iFYear = iYear - 621
iFDayOfYear = iDayOfYear - 79
Else
iFYear = iYear - 622
iFDayOfYear = (iNumDayOfYear - 79) + iDayOfYear
End If
iFDay = iFDayOfYear
While (iFDay > aIFMonthDays(iFMonth))
iFDay = iFDay - aIFMonthDays(iFMonth)
iFMonth = iFMonth + 1
End While
iFMonth = iFMonth + 1
Return DateSerial(iFYear, iFMonth, iFDay)
End Function