Berikut adalah fungsi untuk mengubah tanggal Masehi ke Hijriyah dan sebaliknya. Kode program dalam bahasa Pascal ( Delphi ), tetapi saya rasa mudah untuk dikonversi ke bahasa pemrograman lain

, juga saya beri sedikit keterangan. Algoritma saya temukan beberapa tahun yang lalu dari internet tanpa sumber yang jelas. Semoga bermanfaat.
// Mengambil nilai integer dari bilangan real
Function IntPart(FloatNum : real) : integer;
Begin
if FloatNum < -0.0000001 then
Result := ceil(FloatNum-0.0000001)
else
Result := Floor(FloatNum + 0.0000001);
End;
{ Function HtoM(Tgl : TdateTime) : TdateTime;
Algoritma diperoleh dari internet tanpa sumber }
Function ConvertDate(HijriToMasehi:Boolean; const y,m,d:Word):TDate;
var
jd,L,N,i,J,K :integer;
Rm,Rd,Ry : integer; //result
Tgl : TDateTime;
y2,m2,d2 : Word;
begin
{ Merubah nilai y-m-d menjadi variabel TDateTime ( Tgl) }
EncodeDate(y,m,d,Tgl);
{ Merubah Variabel Tgl menjadi tahun=y2, bulan=m2 dan day=d2 }
DecodeDate(Tgl,y2,m2,d2);
{ HijriyahDiff = 0 atau bisa +1 atau -1 untuk menyesuaikan jika
kemungkinan berbeda dengan ruqyah }
d2 := d2 + HijriyahDiff;
if HijriToMasehi then // Konversi Hijriyah ke Masehi
Begin
jd := intPart((11*y2+3)/30)+354*y2+30*m2-intPart((m2-1)/2)+
d2+1948440-385;
if (jd> 2299160 ) then
Begin
L := jd+68569;
N := intPart((4*L)/146097);
L := L-intPart((146097*N+3)/4);
i := intPart((4000*(L+1))/1461001);
L := L-intPart((1461*i)/4)+31;
J := intPart((80*L)/2447);
Rd:= L-intPart((2447*j)/80);
L := intPart(J/11);
Rm:= J+2-12*L;
Ry:= 100*(N-49)+i+L;
End
else
Begin
J := jd+1402;
K := intPart((j-1)/1461);
L := J-1461*k;
N := intPart((L-1)/365)-intPart(L/1461);
i := L-365*N+30;
J := intPart((80*i)/2447);
Rd:= i-intPart((2447*J)/80);
i := intPart(J/11);
Rm:= J+2-12*i;
Ry:= 4*K+N+i-4716;
End;
{ Hasil fungsi Tanggal, Bulan dan Tahun }
Result.Day := Rd;
Result.Month := Rm;
Result.Year := Ry;
end
else // Konversi Masehi ke Hijriyah
Begin
if ((y2>1582) OR((y2=1582) AND (m2>10))OR((y2=1582) AND (m2=10)
AND (d2>14))) then
jd := intPart((1461*(y2+4800+intPart((m2-14)/12)))/4)+
intPart((367*(m2-2-12*(intPart((m2-14)/12))))/12)-
intPart((3*(intPart(
(y2+4900+intPart((m2-14)/12))/100)))/4)+d2-32075
else
jd := 367*y2-intPart((7*(y2+5001+intPart((m2-9)/7)))/4)+
intPart((275*m2)/9)+d2+1729777;
L := jd-1948440+10632;
N := intPart((L-1)/10631);
L := L-10631*n+354;
J := (intPart((10985-L)/5316))*(intPart((50*L)/17719))+
(intPart(L/5670))*(intPart((43*l)/15238));
L := L-(intPart((30-j)/15))*(intPart((17719*j)/50))-
(intPart(j/16))*(intPart((15238*j)/43))+29;
Rm := intPart((24*L)/709);
Rd := l-intPart((709*Rm)/24);
Ry := 30*n+j-30;
{ Hasil fungsi Tanggal, Bulan dan Tahun }
Result.Day := Rd;
Result.Month := Rm;
Result.Year := Ry;
End;
end;
Thanks dan sekian terimakasih
Posted in: DelPhi
Kirimkan Ini lewat Email
BlogThis!
Berbagi ke Facebook
0 komentar:
Posting Komentar