Menu
CoddyTech

Period i Duration

Część sekcji Logika i przepływ sterowania ścieżki Java w Coddy. Lekcja 57 z 59.

Period reprezentuje okres czasu oparty na dacie (lata, miesiące, dni), natomiast Duration reprezentuje okres oparty na czasie (godziny, minuty, sekundy).

Utwórz okres:

Period period = Period.of(1, 2, 15);
// 1 rok, 2 miesiące, 15 dni

Utwórz obiekt Duration:

Duration duration = Duration.ofHours(2);
// 2 godziny
Duration minutes = Duration.ofMinutes(90);
// 90 minut

Po wykonaniu powyższego kodu period zawiera:

P1Y2M15D  // format ISO-8601

Zmierz odstęp między dwiema datami za pomocą Period.between(). Przyjmuje dwie wartości LocalDate i dzieli odstęp na lata, miesiące i dni:

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() zwraca tylko pozostałe dni po uwzględnieniu pełnych lat i miesięcy, a nie łączną liczbę dni między dwiema datami. LocalDateTime udostępnia swoją datę za pomocą toLocalDate().

Zmierz odstęp między dwiema porami za pomocą Duration.between(), która przyjmuje dwie wartości typu LocalDateTime (lub 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() zlicza cały odstęp w minutach, łącznie z godzinami. toMinutesPart() zwraca pozostałe minuty po odliczeniu pełnych godzin, więc ten odstęp wynosi 4 godziny i 15 minut.

challenge icon

Wyzwanie

Łatwy

Utwórz metodę o nazwie calculateDifference, która przyjmuje cztery argumenty:

  1. String (start) w formacie "yyyy-MM-dd HH:mm"
  2. String (end) w formacie "yyyy-MM-dd HH:mm"
  3. String (unit) równy "period" lub "duration"
  4. String (format) równy "full" lub "simple"

Metoda powinna:

  1. Obliczyć różnicę między datami początkową i końcową
  2. Zwrócić różnicę w określonym formacie

Zwracane komunikaty powinny być następujące:

  • Jeśli daty są nieprawidłowe: zwróć "Invalid date format"
  • Jeśli jednostka jest nieprawidłowa: zwróć "Invalid unit"
  • Jeśli format jest nieprawidłowy: zwróć "Invalid format"
  • Dla okresu w formacie "full": "Years: X, Months: Y, Days: Z"
  • Dla okresu w formacie "simple": "XyYmZd"
  • Dla czasu trwania w formacie "full": "Hours: X, Minutes: Y", gdzie Y to pozostałe minuty po odjęciu pełnych godzin
  • Dla czasu trwania w formacie "simple": "XhYm"

Spróbuj swoich sił

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) {
        // Wpisz tutaj swój kod
    }
    
    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 iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Logika i przepływ sterowania

Poćwicz samodzielnie: Kompilator Java online