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)