Menu
CoddyTech

Period ve Duration

Coddy'nin Java Journey'sinin Mantık & Akış bölümünün bir parçası. Ders 57 / 59.

Period, tarihe dayalı bir süreyi (yıl, ay, gün) temsil ederken Duration zamana dayalı bir miktarı (saat, dakika, saniye) temsil eder.

Bir Period oluştur:

Period period = Period.of(1, 2, 15);
// 1 yıl, 2 ay, 15 gün

Bir Duration oluşturun:

Duration duration = Duration.ofHours(2);
// 2 saat
Duration minutes = Duration.ofMinutes(90);
// 90 dakika

Yukarıdaki kodu çalıştırdıktan sonra, period şunu içerir:

P1Y2M15D  // ISO-8601 biçimi

İki tarih arasındaki farkı Period.between() ile ölçün. Bu yöntem iki LocalDate değeri alır ve farkı yıl, ay ve gün olarak böler:

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(), iki tarih arasındaki toplam gün sayısını değil, tam yıl ve aylardan sonra artan günleri döndürür. Bir LocalDateTime nesnesinin tarihini toLocalDate() ile alabilirsiniz.

Duration.between() ile iki zaman arasındaki farkı ölç; bu yöntem iki LocalDateTime (veya LocalTime) değeri alır:

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(), saatler dâhil farkın tamamını dakika olarak sayar. toMinutesPart(), tam saatlerden sonra kalan dakikaları verir; dolayısıyla bu fark 4 saat 15 dakikadır.

challenge icon

Görev

Kolay

Dört bağımsız değişken alan calculateDifference adlı bir yöntem oluştur:

  1. "yyyy-MM-dd HH:mm" biçiminde bir String (start)
  2. "yyyy-MM-dd HH:mm" biçiminde bir String (end)
  3. "period" veya "duration" değerlerinden biri olan bir String (unit)
  4. "full" veya "simple" değerlerinden biri olan bir String (format)

Yöntem şunları yapmalıdır:

  1. Başlangıç ve bitiş tarihleri arasındaki farkı hesaplamak
  2. Farkı belirtilen biçimde döndürmek

Döndürülecek mesajlar:

  • Geçersiz tarihler için: "Invalid date format" döndür
  • Geçersiz birim için: "Invalid unit" döndür
  • Geçersiz biçim için: "Invalid format"
  • "full" biçimindeki period için: "Years: X, Months: Y, Days: Z"
  • "simple" biçimindeki period için: "XyYmZd"
  • "full" biçimindeki duration için: "Hours: X, Minutes: Y"; burada Y, tam saatlerden sonra kalan dakikadır
  • "simple" biçimindeki duration için: "XhYm"

Kendin dene

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) {
        // Kodunuzu buraya yazın
    }
    
    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 iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Mantık & Akış bölümündeki tüm dersler

Kendi başına pratik yap: Online Java derleyicisi