Menu
CoddyTech

Period dan Duration

Termasuk bagian Logika & Alur dalam perjalanan Java di Coddy. Pelajaran 57 dari 59.

Period merepresentasikan jumlah waktu berbasis tanggal (tahun, bulan, hari), sedangkan Duration merepresentasikan jumlah waktu berbasis waktu (jam, menit, detik).

Buat Period:

Period period = Period.of(1, 2, 15);
// 1 tahun, 2 bulan, 15 hari

Buat Duration:

Duration duration = Duration.ofHours(2);
// 2 jam
Duration minutes = Duration.ofMinutes(90);
// 90 menit

Setelah menjalankan kode di atas, period berisi:

P1Y2M15D  // format ISO-8601

Ukur selisih antara dua tanggal dengan Period.between(). Fungsi ini menerima dua nilai LocalDate dan membagi selisihnya menjadi tahun, bulan, dan hari:

LocalDate start = LocalDate.of(2024, 1, 15);
LocalDate end = LocalDate.of(2025, 3, 20);
Period p = Period.between(start, end);
p.getYears();   // 1
p.getMonths();  // 2
p.getDays();    // 5

getDays() hanya mengembalikan sisa hari setelah menghitung tahun dan bulan penuh, bukan jumlah total hari antara kedua tanggal. LocalDateTime memberikan tanggalnya melalui toLocalDate().

Ukur selisih antara dua waktu dengan Duration.between(), yang menerima dua nilai LocalDateTime (atau LocalTime):

LocalDateTime from = LocalDateTime.of(2024, 3, 15, 10, 30);
LocalDateTime to = LocalDateTime.of(2024, 3, 15, 14, 45);
Duration d = Duration.between(from, to);
d.toHours();        // 4
d.toMinutes();      // 255
d.toMinutesPart();  // 15

toMinutes() menghitung seluruh selisih dalam menit, termasuk jam. toMinutesPart() memberikan sisa menit setelah jam penuh, jadi selisih ini adalah 4 jam dan 15 menit.

challenge icon

Tantangan

Mudah

Buat method bernama calculateDifference yang menerima empat argumen:

  1. String (start) dengan format "yyyy-MM-dd HH:mm"
  2. String (end) dengan format "yyyy-MM-dd HH:mm"
  3. String (unit) yang berupa "period" atau "duration"
  4. String (format) yang berupa "full" atau "simple"

Method tersebut harus:

  1. Menghitung selisih antara tanggal mulai dan tanggal akhir
  2. Mengembalikan selisih dalam format yang ditentukan

Pesan yang dikembalikan harus berupa:

  • Jika tanggal tidak valid: kembalikan "Invalid date format"
  • Jika unit tidak valid: kembalikan "Invalid unit"
  • Jika format tidak valid: kembalikan "Invalid format"
  • Untuk period dengan format "full": "Years: X, Months: Y, Days: Z"
  • Untuk period dengan format "simple": "XyYmZd"
  • Untuk duration dengan format "full": "Hours: X, Minutes: Y", dengan Y adalah sisa menit setelah jam penuh dihitung
  • Untuk duration dengan format "simple": "XhYm"

Coba sendiri

import java.util.Scanner;
import java.time.*;
import java.time.format.*;

public class Main {
    public static String calculateDifference(String start, String end, String unit, String format) {
        // Tulis kodemu di sini
    }
    
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String start = scanner.nextLine();
        String end = scanner.nextLine();
        String unit = scanner.nextLine();
        String format = scanner.nextLine();
        
        System.out.println(calculateDifference(start, end, unit, format));
    }
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Logika & Alur

Latihan sendiri: Compiler Java online