Thursday, May 30, 2013

Konversi Kalender Hijriyah ke Masehi


Beberapa waktu yang lalu, saya sudah memposting konversi kalender masehi ke kalender jawa. Pada kesempatan kali ini akan dijelaskan bagaimana cara mengkonversi kalender jawa (mirip dengan kalender Hijriyah hisab Urfi) ke kalender masehi. Jadi dibalik, kalau kemarin patokannya adalah kalender masehi, sekarang yang menjadi patokan adalah kalender Hijriyah.
Memang hasil konversi ini tidak bisa dijadikan patokan untuk menentukan hari-hari besar agama Islam. Hal ini disebabkan mekanisme penghitungan didasarkan atas rata-rata pergerakan bulan dibandingkan dengan tahun-tahun sebelumnya. Sedangkan untuk menentukan hari-hari besar agama Islam tentunya yang lebih valid adalah melakukan Rukyah (melihat posisi bulan,matahari dan bumi secara langsung dengan mata telajang atau menggunakan bantuan teleskop).
Langsung saja kita bahas tata cara codingnya.
Pertama, ketika kita membuat aplikasi Android tentunya perlu dibuat dulu susunan layout-nya. Pengaturan layout (tampilan) ini bisa dilakukan dengan cara merubah file main.xml yang terletak pada folder res->layout. Script main.xml bisa dilihat seperti dibawah ini

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_width="fill_parent"  
  4.     android:layout_height="fill_parent"  
  5.     android:orientation="vertical" >  
  6.   
  7.     <TextView  
  8.         android:layout_width="wrap_content"  
  9.         android:layout_height="wrap_content"  
  10.         android:text="Tanggal Hijriyah (format : tgl/bln/tahun ex : 1/9/1433)" />  
  11.   
  12.     <EditText  
  13.         android:id="@+id/tgl"  
  14.         android:layout_width="match_parent"  
  15.         android:layout_height="wrap_content" >  
  16.   
  17.         <requestFocus />  
  18.     </EditText>  
  19.       
  20.     <Button  
  21.         android:id="@+id/btnKonversi"  
  22.         android:layout_width="wrap_content"  
  23.         android:layout_height="wrap_content"  
  24.         android:text="Konversi" />  
  25.     <TextView android:id="@+id/hasil"  
  26.                 android:layout_width="wrap_content"  
  27.                 android:layout_height="wrap_content"  
  28.                 android:text=""/>  
  29. </LinearLayout>  
Setelah layout selesai dibuat, maka yang perlu kita kerjakan adalah membuat coding java-nya. Dalam artikel ini code java-nya dinamakan Hijriyah_ke_Masehi.java.

  1. package eko.kalender.hijriyah_ke_masehi;  
  2.   
  3. import android.app.Activity;  
  4. import android.os.Bundle;  
  5. import android.view.View;  
  6. import android.widget.Button;  
  7. import android.widget.EditText;  
  8. import android.widget.TextView;  
  9.   
  10. public class Hijriyah_ke_Masehi extends Activity {  
  11.     private EditText tgl_hijriyah;  
  12.     private Button btn_konversi;  
  13.     private TextView tgl_masehi;  
  14.     private String[] nama_minggu = new String[]{"Senin","Selasa","Rabu","Kamis","Jumat","Sabtu","Minggu"};  
  15.     private String[] nama_bulan_masehi = new String[]{  
  16.             "Januari""Februari""Maret""April","Mei","Juni",  
  17.             "Juli","Agustus","September","Oktober","November","Desember"  
  18.         };  
  19.       
  20.     /** Called when the activity is first created. */  
  21.     @Override  
  22.     public void onCreate(Bundle savedInstanceState) {  
  23.         super.onCreate(savedInstanceState);  
  24.         setContentView(R.layout.main);  
  25.           
  26.         tgl_hijriyah = (EditText) findViewById(R.id.tgl);  
  27.         btn_konversi = (Button) findViewById(R.id.btnKonversi);  
  28.         tgl_masehi = (TextView) findViewById(R.id.hasil);  
  29.         btn_konversi.setOnClickListener(new View.OnClickListener() {  
  30.               
  31.             @Override  
  32.             public void onClick(View v) {  
  33.                 // TODO Auto-generated method stub  
  34.                 String[] tgl = tgl_hijriyah.getEditableText().toString().split("/");  
  35.                 int d = Integer.parseInt(tgl[0]);  
  36.                 int m = Integer.parseInt(tgl[1]);  
  37.                 int y = Integer.parseInt(tgl[2]);  
  38.                   
  39.                 String[] hasil = JawaToGregory(d, m, y);  
  40.                 String temp = "";  
  41.                 for(int i=0;i<4;i++){  
  42.                     temp += hasil[i]+ " ";  
  43.                 }  
  44.                 tgl_masehi.setText(temp);  
  45.             }  
  46.         });  
  47.     }  
  48.       
  49.     private double intPart(double floatNum){  
  50.         if ((float)floatNum < -0.0000001return (double) Math.ceil(floatNum-0.0000001);  
  51.         return (double)Math.floor(floatNum +0.0000001);      
  52.     }  
  53.   //parameter :   
  54.     //d : tanggal masehi  
  55.     //m : bulan masehi  
  56.     //y : tahun masehi  
  57.     //output array :  
  58.     //  
  59.     public String[] JawaToGregory(int d, int m, int y){  
  60.         double l, n, i, j, k,  tgl, bln, thn;  
  61.         double JDE =intPart((11*y+3)/30)+354*y+30*m-intPart((m-1)/2)+d+1948440-385;  
  62.         if (JDE> 2299160 )  
  63.         {  
  64.             l=JDE+68569;  
  65.             n=intPart((4*l)/146097);  
  66.             l=l-intPart((146097*n+3)/4);  
  67.             i=intPart((4000*(l+1))/1461001);  
  68.             l=l-intPart((1461*i)/4)+31;  
  69.             j=intPart((80*l)/2447);  
  70.               
  71.             tgl=l-intPart((2447*j)/80);  
  72.             l=intPart(j/11);  
  73.             bln=j+2-12*l;  
  74.             thn =100*(n-49)+i+l;  
  75.         }  
  76.         else  
  77.         {  
  78.             j=JDE+1402;  
  79.             k=intPart((j-1)/1461);  
  80.             l=j-1461*k;  
  81.             n=intPart((l-1)/365)-intPart(l/1461);  
  82.             i=l-365*n+30;  
  83.             j=intPart((80*i)/2447);  
  84.             tgl=i-intPart((2447*j)/80);  
  85.             i=intPart(j/11);  
  86.             bln=j+2-12*i;  
  87.             thn=4*k+n+i-4716;  
  88.         }  
  89.         int hari = (int)JDE % 7;  
  90.         return new String[]{  
  91.                 nama_minggu[hari],              //hari              0  
  92.                 String.valueOf((int)tgl),       //tanggal masehi    1  
  93.                 nama_bulan_masehi[(int)bln-1],  //bulan masehi      2  
  94.                 String.valueOf((int)thn)        //tahun Masehi      3  
  95.         };  
  96.     }  
  97. }  
Link download contoh aplikasi sudah saya sediakan, silahkan dikembangkan lebih lanjut.
Demikian semoga ada guna dan manfaatnya.

sumber : http://www.blogkomputer.com/data-konversi-kalender-hijriyah-ke-masehi.html

1 comment: