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:

code format="lb" 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 code 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.