Home > JAVA > Menghitung selisih dua tanggal

Menghitung selisih dua tanggal

Sedikit share cara menghitung perbedaan dua tanggal menggunakan library bawaan Java (hasilnya dalam hari). Intinya adalah kita menghitung perbedaan hari dari dua tanggal tersebut. Cara ini cukup sensitif terhadap perbedaan waktu, beda sedikit saja walaupun tanggalnya sama tetap akan dianggap tanggal berbeda.


public class TryDifferentDate {

/**
* @param args
* @throws ParseException
*/
public static void main(String[] args) throws ParseException {
String tanggalAwal = "01-10-2012";
DateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
Date tanggal = (Date) dateFormat.parse(tanggalAwal);
Calendar cal1 = Calendar.getInstance();cal1.setTime(tanggal);
Calendar cal2 = Calendar.getInstance();cal2.setTime(new Date());
System.out.println(daysBetween( cal1, cal2));
}
public static long daysBetween(Calendar tanggalAwal, Calendar tanggalAkhir){
long bedaHari = 0;
Calendar tanggal = (Calendar) tanggalAwal.clone();
while(tanggal.before(tanggalAkhir)){
tanggal.add(Calendar.DAY_OF_MONTH, 1);
bedaHari++;
}
return bedaHari;
}
}

Jika menggunakan perhitungan milidetik.


public class TryDifferentDateMiliDetik {
public static void main(String[] args) throws ParseException {
String tanggalAwal = "03-10-2012";
DateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
Date tanggal = (Date) dateFormat.parse(tanggalAwal);
Calendar cal1 = Calendar.getInstance();cal1.setTime(tanggal);
Calendar cal2 = Calendar.getInstance();cal2.setTime(new Date());
System.out.println(daysBetween( cal1, cal2));
}
public static long daysBetween(Calendar tanggalAwal, Calendar tanggalAkhir){
long bedaHari = 0;
int miliDetikPerHari = 1000*60*60*24;
long tanggalAkhirDalamMiliDetik = tanggalAkhir.getTimeInMillis();
int selisihHari = (int)((tanggalAkhirDalamMiliDetik - tanggalAwal.getTimeInMillis())/miliDetikPerHari);
Calendar cursor = (Calendar) tanggalAwal.clone();
cursor.add(Calendar.DAY_OF_YEAR, selisihHari);
long cursorDalamMiliDetik = cursor.getTimeInMillis();
if(cursorDalamMiliDetik == tanggalAkhirDalamMiliDetik)
return selisihHari;
int step = cursorDalamMiliDetik < tanggalAkhirDalamMiliDetik ? 1 : -1;
do{
cursor.add(Calendar.DAY_OF_MONTH, step);
selisihHari += step;
}while(cursor.getTimeInMillis() <= tanggalAkhirDalamMiliDetik);
return selisihHari;
}
}

Yang paling sederhana


public class TryDifferentDateMiliDetikTwo {
public static void main(String[] args) throws ParseException {
String tanggalAwal = "03-10-2012";
DateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
Date tanggal = (Date) dateFormat.parse(tanggalAwal);
Date tanggalAkhir = new Date();
long bedaWaktu = Math.abs(tanggalAkhir.getTime()-tanggal.getTime());
System.out.printf("Bedanya %d hari", TimeUnit.MILLISECONDS.toDays(bedaWaktu));
}
}

Jika menggunakan library Joda (banyak yang menyarankan)


import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.joda.time.DateTime;
import org.joda.time.Days;

public class TryDifferentDateJoda {

public static void main(String[] args) throws ParseException {
String tanggal = "03-10-2012";
DateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
Date tanggalAwal = (Date) dateFormat.parse(tanggal);
Date tanggalAkhir = new Date();
int bedaHari = Days.daysBetween(new DateTime(tanggalAwal), new DateTime(tanggalAkhir)).getDays();
System.out.println("Perbedaan harinya " + bedaHari);
}
}

Categories: JAVA
  1. January 8, 2013 at 4:26 am

    Kalau misalkan saya hanya mau menghitung jam ny saja gmn y??
    thnks

  2. April 15, 2014 at 6:22 am

    woyy … gmana si ngasih tutorial .. background nya foto cew mulu… jadi ga konsen .. liat kodingnya…

  1. No trackbacks yet.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: