islamic_20calendar_20conversion_20_28lbb_29
This is an old revision of the document!
Islamic calendar conversion (LBB)
by Richard Russell, August 2015
The code below shows how to convert between Western (Gregorian) and Islamic (Hijri) dates; it requires Windows Vista or later:
CAL.HIJRI = 6 global CAL.HIJRI
struct SYSTEMTIME, wYear as word, wMonth as word, _ wDayOfWeek as word, wDay as word, wHour as word, _ wMinute as word, wSecond as word, wMilliseconds as word
struct CALDATETIME, CalId as long, Era as long, _ Year as long, Month as long, Day as long, DayOfWeek as long, _ Hour as long, Minute as long, Second as long, Tick as long
year = 1952 : month = 5 : day = 3
call GregorianToHijri year, month, day print year, month, day
call HijriToGregorian year, month, day print year, month, day
wait end
sub GregorianToHijri byref year, byref month, byref day SYSTEMTIME.wYear.struct = year SYSTEMTIME.wMonth.struct = month SYSTEMTIME.wDay.struct = day calldll #kernel32, "ConvertSystemTimeToCalDateTime", _ SYSTEMTIME as struct, CAL.HIJRI as long, _ CALDATETIME as struct, result as long year = CALDATETIME.Year.struct month = CALDATETIME.Month.struct day = CALDATETIME.Day.struct end sub
sub HijriToGregorian byref year, byref month, byref day CALDATETIME.Year.struct = year CALDATETIME.Month.struct = month CALDATETIME.Day.struct = day CALDATETIME.CalId.struct = CAL.HIJRI CALDATETIME.Era.struct = 1 for dow = 1 to 7 CALDATETIME.DayOfWeek.struct = dow calldll #kernel32, "ConvertCalDateTimeToSystemTime", _ CALDATETIME as struct, SYSTEMTIME as struct, _ result as long next year = SYSTEMTIME.wYear.struct month = SYSTEMTIME.wMonth.struct day = SYSTEMTIME.wDay.struct end sub
Note that, depending on the time of day and the location, there may be some ambiguity in the conversion so don't be surprised if these routines give a result which is a day or so different from that obtained from other calculators.
islamic_20calendar_20conversion_20_28lbb_29.1522502365.txt.gz · Last modified: 2024/01/05 00:17 (external edit)