Konversi Hijriyah ke Masehi dan sebaliknya
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 thenResult := 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;
Ditulis oleh Ebta Setiawan (pada hari Selasa, 20 Maret 2007)
Kategori Delphi, Islamics, Programming, Software dengan tags : Algoritma, hijriyah, Source Code
Sudah dilihat 1,590 kali dan sudah ada 10 komentar. Ingin selalu mendapatkan informasi artikel terbaru lewat email ? Daftarkan email di RSS feed







March 21st, 2007 at 5:57 am
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.
July 8th, 2007 at 12:58 am
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.
March 2nd, 2008 at 11:56 am
Syukron atas info-infonya khususnya info tentang software Islam-nya dan mohon ijin untuk didownload ya mas …..
August 11th, 2008 at 1:46 pm
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
August 11th, 2008 at 9:08 pm
maksudnya tampil di sistem tray windows atau program terpisah ?
September 8th, 2008 at 2:58 pm
assalamu’alaikum…
bagus eb…
met bjuang terus….:)
February 5th, 2009 at 6:50 pm
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.
February 7th, 2009 at 7:12 am
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..
March 2nd, 2009 at 11:45 am
Syukron, alus pisan
walaikum salam
January 7th, 2010 at 8:59 pm
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