Menu
CoddyTech

Period и Duration

Часть раздела Логика и управление потоком путешествия по Java на Coddy. Урок 57 из 59.

Period представляет собой промежуток времени, выраженный в датах (годы, месяцы, дни), а Duration — промежуток времени, выраженный во времени (часы, минуты, секунды).

Создайте период:

Period period = Period.of(1, 2, 15);
// 1 год, 2 месяца, 15 дней

Создайте Duration:

Duration duration = Duration.ofHours(2);
// 2 часа
Duration minutes = Duration.ofMinutes(90);
// 90 минут

После выполнения приведённого выше кода period содержит:

P1Y2M15D  // Формат ISO-8601

Измерьте разницу между двумя датами с помощью Period.between(). Он принимает два значения LocalDate и разбивает разницу на годы, месяцы и дни:

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() возвращает только оставшиеся дни после полных лет и месяцев, а не общее количество дней между двумя датами. Получить дату из LocalDateTime можно с помощью toLocalDate().

Измерьте промежуток между двумя моментами времени с помощью Duration.between(), которая принимает два значения LocalDateTime (или 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() считает весь промежуток в минутах, включая часы. toMinutesPart() возвращает оставшиеся минуты после полных часов, поэтому этот промежуток составляет 4 часа и 15 минут.

challenge icon

Задание

Легко

Создай метод с именем calculateDifference, который принимает четыре аргумента:

  1. Строку (start) в формате "yyyy-MM-dd HH:mm"
  2. Строку (end) в формате "yyyy-MM-dd HH:mm"
  3. Строку (unit) со значением "period" или "duration"
  4. Строку (format) со значением "full" или "simple"

Метод должен:

  1. Вычислить разницу между датами начала и окончания
  2. Вернуть разницу в указанном формате

Сообщения, возвращаемые методом:

  • Если даты недопустимы: вернуть "Invalid date format"
  • Если единица измерения недопустима: вернуть "Invalid unit"
  • Если формат недопустим: вернуть "Invalid format"
  • Для периода с форматом "full": "Years: X, Months: Y, Days: Z"
  • Для периода с форматом "simple": "XyYmZd"
  • Для длительности с форматом "full": "Hours: X, Minutes: Y", где Y — оставшееся количество минут после вычета полных часов
  • Для длительности с форматом "simple": "XhYm"

Попробуйте сами

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) {
        // Напишите здесь свой код
    }
    
    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 iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Логика и управление потоком

Потренируйтесь самостоятельно: Онлайн-компилятор Java