Saturday, February 20, 2016
Dalam bahasa pemrograman Java, ada library yang bisa Anda gunakan
untuk mencari selisih waktu yakni JodaTime. JodaTime berfungsi untuk
mencari selisih waktu di Java. Dalam beberapa kasus, JodaTime tidak
selalu bisa Anda gunakan namun, kalau Anda hanya ingin mencari selisih
waktu saya rasa JodaTime masih bisa Anda gunakan. Untuk contoh kasus,
menghitung total jam kerja si Pegawai yang masuk pukul 08:00 dan pulang
pukul 17:00 maka, JodaTime masih mampu menyelesaikannya namun, jika di
perusahaan tersebut terdapat shift 24 jam dan si Pegawai masuk pukul
22:00 dan pulang pukul 07:00 maka, JodaTime akan menghasilkan output
yang tidak sesuai pula dan outputnya ialah 15 jam. Lalu, bagaimana cara
menyelesaikan contoh kasus yang si Pegawai masuk malam dan pulang pagi
tersebut? Iya, jelas bisa. Anda harus bermain sedikit logika Anda.
Berikut algoritma untuk menyelesaikannya:
- Input Waktu masuk si pegawai dan waktu pulang si pegawai.
- Kemudian, ubah Waktu masuk dan Waktu pulang menjadi 3 bagian yakni Jam, Menit dan Detik.
- Buat sebuah variable untuk menghitung berapa selisih waktu masuk
dengan waktu pulang. Nilai ini akan selalu bertambah 1 pada poin nomor 4
dan 5.
- Setelah itu, lakukan secara berurutan dimulai dari detik dimana,
Anda harus mengsamakan nilai detik waktu masuk dan detik waktu pulang.
Caranya, cukup dengan cara menambahkan atau increment nilai detik waktu
masuk. Lakukan ini dengan menggunakan perulangan. Dan jika nilai detik
melewati 59 maka, nilai menit waktu masuk ditambah 1. Ingat, ketika
perulangan maka, nilai variable yang Anda buat pada poin 3 tadi juga
ikut Anda tambahkan atau increment 1.
- Setelah selesai dengan detiknya maka, lakukanlah hal yang sama
dengan menit waktu masuk dan menit waktu pulang dimana, Anda harus
mengsamakan nilai waktu menit masuk dengan waktu menit pulang dengan
cara increment dan lakukan dengan menggunakan perulangan. Jika nilai
menit waktu masuk melewati menit 59 maka, nilai waktu jam ditambah 1.
Lakukanlah hal yang sama dengan nilai jam waktu masuk. Ingat, pada poin
ini juga Anda increment nilai variable pada poin nomor 3 tadi.
- Setelah nilai waktu jam, menit dan detik masuk sama dengan waktu
jam, menit dan detik pulang maka, saatnya mengolah nilai variable pada
poin nomor 3 yang sudah Anda increment pada poin nomor 4 dan 5.
Bagaimana cara mengolahnya? Anda bisa mengolahnya untuk mendapatkan
nilai selisih dalam format HH:mm:ss atau Anda bisa juga mengolahnya
menjadi satuan detik semua. Itu semua tergantung Anda sendiri gimana
maunya.
Perlu diketahui, ini merupakan salah satu cara dari seribu satu cara
yang ada untuk menyelesaikan masalah diatas tadi. Dan berikut ialah
source code untuk menyelesaikan masalah diatas.
|
import java.util.Scanner;
/**
*
* @author Yudi Setiawan
*
*/
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println( "Waktu Awal" );
System.out.print( "Input Jam : " ); String str_jam_awal = scan.nextLine();
System.out.print( "Input Menit : " ); String str_menit_awal = scan.nextLine();
System.out.print( "Input Detik : " ); String str_detik_awal = scan.nextLine();
System.out.println( "\nWaktu Akhir" );
System.out.print( "Input Jam : " ); String str_jam_akhir = scan.nextLine();
System.out.print( "Input Menit : " ); String str_menit_akhir = scan.nextLine();
System.out.print( "Input Detik : " ); String str_detik_akhir = scan.nextLine();
String str_waktu_awal = str_jam_awal+ ":" +str_menit_awal+ ":" +str_detik_awal;
String str_waktu_akhir = str_jam_akhir+ ":" +str_menit_akhir+ ":" +str_detik_akhir;
System.out.println( "Waktu Awal : " +str_waktu_awal);
System.out.println( "Waktu Akhir : " +str_waktu_akhir);
int jam_awal = Integer.parseInt(str_jam_awal);
int jam_akhir = Integer.parseInt(str_jam_akhir);
int menit_awal = Integer.parseInt(str_menit_awal);
int menit_akhir = Integer.parseInt(str_menit_akhir);
int detik_awal = Integer.parseInt(str_detik_awal);
int detik_akhir = Integer.parseInt(str_detik_akhir);
int selisih_detik = 0 ;
if (detik_awal > detik_akhir) {
while (detik_awal != detik_akhir) {
if (detik_awal == 60 ) {
detik_awal = 0 ;
menit_awal++;
continue ;
}
detik_awal++;
selisih_detik++;
}
}
else if (detik_awal < detik_akhir) {
selisih_detik = detik_akhir - detik_awal;
}
int selisih_waktu = selisih_detik;
int selisih_menit = 0 ;
if (menit_awal > menit_akhir) {
while (menit_awal != menit_akhir) {
if (menit_awal == 60 ) {
menit_awal = 0 ;
jam_awal++;
continue ;
}
menit_awal++;
selisih_menit++;
}
}
else if (menit_awal < menit_akhir) {
selisih_menit = menit_akhir - menit_akhir;
}
selisih_waktu += selisih_menit * 60 ;
int selisih_jam = 0 ;
if (jam_awal > jam_akhir) {
while (jam_awal != jam_akhir) {
if (jam_awal == 24 ) {
jam_awal = 0 ;
continue ;
}
jam_awal++;
selisih_jam++;
}
}
else if (jam_awal < jam_akhir)
selisih_jam = jam_akhir - jam_awal;
selisih_waktu += selisih_jam * 3600 ;
System.out.println( "Selisih antara waktu awal dan waktu akhir (detik) : " +selisih_waktu);
int jam = selisih_waktu / 3600 ;
selisih_waktu %= 3600 ;
int menit = 0 ;
int detik = 0 ;
if (selisih_waktu >= 60 ) {
menit = selisih_waktu / 60 ;
detik = selisih_waktu % 60 ;
} else {
menit = 0 ;
detik = selisih_waktu;
}
String waktu = jam+ ":" +menit+ ":" +detik;
System.out.println( "Selisih antara waktu awal dan waktu akhir (HH:mm:ss) : " +waktu);
}
}
|
Dan berikut ialah yang menggunakan library JodaTime. Jangan lupa download terlebih dahulu library nya di internet.
|
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Scanner;
import org.joda.time.DateTime;
import org.joda.time.Seconds;
/**
*
* @author Yudi Setiawan
*
*/
public class Main2 {
public static void main(String[] args) throws ParseException {
SimpleDateFormat sdfTime = new SimpleDateFormat( "HH:mm:ss" );
Scanner scan = new Scanner(System.in);
System.out.println( "Waktu Awal" );
System.out.print( "Input Jam : " ); String waktu_awal = scan.nextLine()+ ":" ;
System.out.print( "Input Menit : " ); waktu_awal += scan.nextLine()+ ":" ;
System.out.print( "Input Detik : " ); waktu_awal += scan.nextLine();
System.out.println( "\nWaktu Akhir" );
System.out.print( "Input Jam : " ); String waktu_akhir = scan.nextLine()+ ":" ;
System.out.print( "Input Menit : " ); waktu_akhir += scan.nextLine()+ ":" ;
System.out.print( "Input Detik : " ); waktu_akhir += scan.nextLine();
DateTime dtAwal = new DateTime(sdfTime.parse(waktu_awal));
DateTime dtAkhir = new DateTime(sdfTime.parse(waktu_akhir));
System.out.println();
System.out.println( "Waktu Awal : " +waktu_awal);
System.out.println( "Waktu Akhir : " +waktu_akhir);
int selisih_detik = Math.abs(Seconds.secondsBetween(dtAwal, dtAkhir).getSeconds());
System.out.println( "Selisih waktu awal dan waktu akhir (detik) : " +selisih_detik);
int jam = selisih_detik / 3600 ;
selisih_detik %= 3600 ;
int menit = 0 ;
int detik = 0 ;
if (selisih_detik >= 60 ) {
menit = selisih_detik / 60 ;
detik = selisih_detik % 60 ;
} else {
detik = selisih_detik;
}
String selisih_waktu = jam+ ":" +menit+ ":" +detik;
System.out.println( "Selisih waktu awal dan waktu akhir (HH:mm:ss) : " +selisih_waktu);
}
}
|
Dan berikut output untuk kedua program diatas.
(Sumber : jagocoding)
0 Komentar untuk "Cara Mencari Selisih Waktu di Java"