Konversi Hijriyah ke Masehi dan sebaliknya 0

i_Tb | 02.01 |

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;

0 Responses So Far:

 
Share 4 All Copyright © 2010 Prozine Theme is Designed by Lasantha Home | RSS Feed | Comment RSS