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(); // 5getDays() возвращает только оставшиеся дни после полных лет и месяцев, а не общее количество дней между двумя датами. Получить дату из 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(); // 15toMinutes() считает весь промежуток в минутах, включая часы. toMinutesPart() возвращает оставшиеся минуты после полных часов, поэтому этот промежуток составляет 4 часа и 15 минут.
Задание
ЛегкоСоздай метод с именем calculateDifference, который принимает четыре аргумента:
- Строку (
start) в формате "yyyy-MM-dd HH:mm" - Строку (
end) в формате "yyyy-MM-dd HH:mm" - Строку (
unit) со значением "period" или "duration" - Строку (
format) со значением "full" или "simple"
Метод должен:
- Вычислить разницу между датами начала и окончания
- Вернуть разницу в указанном формате
Сообщения, возвращаемые методом:
- Если даты недопустимы: вернуть "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));
}
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
1Многомерные массивы
Основы 2D-массивовДоступ к элементам 2D-массиваВложенные циклы с 2D-массивамиПовторение - 2D-массивыСложение и вычитание матрицРваные массивы3D-массивы и вышеРаспространённые паттерны 2D-массивовПовторение - всё о массивах4HashSet Часть 1
Что такое HashSet?Добавление элементаУдаление элементаПроверка наличия элементаПустота и размерОчистка и клонированиеПовторение - HashSet10Даты и время
Основы LocalDateОперации с LocalTimeИспользование LocalDateTimePeriod и DurationФорматирование датРабота с часовыми поясами2HashMap Часть 1
Что такое HashMap?Объявление HashMapДоступ к значениямПроверка существования ключаИзменение словарейИтоги - HashMap3HashMap. Часть 2
Методы HashMapИтерация с keySet()Итерация с entrySet()Вложенный HashMapПовторение - Управление складомПовторение - Операции HashMap6Продвинутое управление потоком
Операторы метокВыражение switchСопоставление шаблоновОхранные клаузыИтоги - управление потоком9Проект - Счетчик уникальных слов
Ввод и хранение текстаОбработка словПотренируйтесь самостоятельно: Онлайн-компилятор Java