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;
Good Job! Mudah-mudahan bermanfaat untuk pemrograman yang lain, karena kode-nya sederhana.
Semoga situs ini terus berkembang dan menyajikan informasi-informasi yang bermanfaat bagi banyak orang.
Ass.
1st Of All.. SALUT..
Mas, dulu waktu skripsi, saya mau mengangkat judul tentang Penentuan Arah Qiblat dan Penentuan Masuknya Bulan Hijriyah.. berangkat dari sebuah buku.. tapi, karena kurang referensi dan saya baru buka web ini sekarang, jadi nya tak jadi.
Terus bjuang.. mas, gimana kalo buat program yang “Full Version” mulai dari penentuan arah kiblat s/d penentuan Masuknya Bulan Hijriyah, tentunya dengan tetap memperhatikan Dalil-Dalil.. Terlepas dari banyaknya perdebatan yang selalu/akan terjadi.
Wass.
Oia, Saya Alumni sebuah Lembaga Pendidikan di Bandung, Jurusan Tehnik Informatika.
Syukron atas info-infonya khususnya info tentang software Islam-nya dan mohon ijin untuk didownload ya mas …..
Mas gimana caranya agar tanggal Masehi dan tanggal Hijriyah ada dan berdampingan,kalau bisa sudah berupa software yang udah jadi biar saya bisa download, makasih yaa
Deprecated: Function create_function() is deprecated in /var/www/html/ebsoft.web.id/wp-content/plugins/wp-spamshield/wp-spamshield.php on line 1961
@arisupar
maksudnya tampil di sistem tray windows atau program terpisah ?
assalamu’alaikum…
bagus eb…
met bjuang terus….:)
Saya sudah mencoba mengaplikasikan ke delphi, tapi hasilnya selalu selisih satu dengan kalender islam yang umum, prayer time yang ada di internet, kecuali dengan shallu. Yang saya maksudkan kalau penaggalan umum tanggal 10 pada program yang didasarkan pada source code di atas (shallu) masih tanggal 9.
Contoh:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,Math, StdCtrls;
type
TForm1 = class(TForm)
Label1: TLabel;
Button1: TButton;
procedure ConvertDate(HijriToMasehi:Boolean; const y,m,d:Word);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{ Function HtoM(Tgl : TdateTime) : TdateTime;
Algoritma diperoleh dari internet tanpa sumber }
procedure TForm1.ConvertDate(HijriToMasehi:Boolean; const y,m,d:Word);
// Mengambil nilai integer dari bilangan real
Function IntPart(FloatNum : real) : integer;
Begin
if FloatNum 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 }
tanggalku := IntToStr(Rd)+’ ‘+IntToStr(Rm)+’ ‘+IntToStr(Ry);
//Result.tglku.Day := Rd;
//Result.tglku.Month := Rm;
//Result.tglku.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 }
tanggalku := IntToStr(Rd)+’ ‘+IntToStr(Rm)+’ ‘+IntToStr(Ry);
//Result.Day := Rd;
//Result.Month := Rm;
//Result.Year := Ry;
End;
Label1.caption:=tanggalku;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ConvertDate(False, 2009,2,5);
end;
end.
Deprecated: Function create_function() is deprecated in /var/www/html/ebsoft.web.id/wp-content/plugins/wp-spamshield/wp-spamshield.php on line 1961
@Ismadi
wa’alaikumsalaam..
🙂
@Amin
Iya itu kelemahan jika menggunakan algoritma, kadang bisa plus minus 1, makanya i program shollu daya tambahkan menu correction.. karena memang penentuan tanggal dengan melihat hilal..
Syukron, alus pisan
walaikum salam
Ass.Wb
Makasih ada informasi spt ini saya dari sastra tak paham sangat ttg rumus2, macam mana kalokasih contoh yang jelas biar gampang konversikannya.
Trims
Salam