Работа с датами: LocalDate и LocalTime

Тренажер по Java для пользователей с начальным уровнем подготовки.

Тренажер по Java

LocalDate и LocalTime — классы пакета java.time для работы с датой и временем без часового пояса. Это удобно в задачах на Java онлайн: дни рождения, расписания, дедлайны, интервалы «с 09:00 до 18:00». Объекты неизменяемые: методы вроде plusDays() возвращают новый экземпляр. Часто используются операции получения текущих значений (now()), разбор компонентов (getYear(), getHour()), сравнение (isBefore()) и вычисления (until()). Пример: LocalDate d = LocalDate.of(2025, 1, 10); LocalTime t = LocalTime.parse("09:30");. В тренажере — задания и тесты с визуализацией кода и практической тренировкой.

Список тем

1. Создать дату и время из значений

id: 40523_ld_lt_01_replace_create

Дополните фрагмент кода на Java так, чтобы он создавал объекты LocalDate и LocalTime с помощью статических методов of. Код должен создать дату 31 декабря 2023 года и время 23 часа 59 минут 30 секунд. Заполните пропуски в вызовах методов of, чтобы программа успешно скомпилировалась и вывела ожидаемые значения. Обратите внимание на синтаксис вызова методов и типы аргументов.

Заполните пропуски
import java.time.LocalDate;
import java.time.LocalTime;

public class Main {
    public static void main(String[] args) {
        // Создаем дату: 2023 год, декабрь (12 месяц), 31 день
        LocalDate date = LocalDate.input1S(2023, input2S, 31);
        // Создаем время: 23 часа, 59 минут, 30 секунд
        LocalTime time = LocalTime.input3S(input4S, 59, 30);
        
        System.out.println("Дата: " + date);
        System.out.println("Время: " + time);
    }
}
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

2. Выбрать методы для получения компонентов

id: 40523_ld_lt_02_selectfill_now_get

В данном фрагменте кода создаются объекты LocalDate и LocalTime, после чего из них извлекаются отдельные компоненты (год, месяц, день, час, минута). Вам необходимо выбрать из выпадающего списка подходящие методы для получения каждого компонента. Обратите внимание на различие между методами, возвращающими числовые значения (например, getYear) и теми, которые возвращают объекты (например, getMonth).

Нужно правильно расставить в пропуски предложенные варианты
import java.time.LocalDate;
import java.time.LocalTime;

public class DateTimeComponents {
    public static void main(String[] args) {
        LocalDate date = LocalDate.of(2023, 12, 25);
        LocalTime time = LocalTime.of(14, 30);
        
        int year = date.input1S();
        int month = date.input2S();
        int day = date.input3S();
        int hour = time.input4S();
        int minute = time.input5S();
        
        System.out.println("Дата: " + year + "-" + month + "-" + day);
        System.out.println("Время: " + hour + ":" + minute);
    }
}
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

3. Исправить разбор времени из строки

id: 40523_ld_lt_03_error_parse

В этом фрагменте java-кода допущены две ошибки, связанные с разбором времени из строки с использованием класса LocalTime. Одна ошибка — в формате строки, передаваемой в метод parse, другая — в имени самого метода. Исправьте эти ошибки, чтобы код успешно распарсил время и вывел его на экран.

Найдите ошибку и исправьте
public class Main {
    public static void main(String[] args) {
        String timeStr = "12:30 PM";
        LocalTime time = LocalTime.pars(timeStr);
        System.out.println("Parsed time: " + time);
    }
}
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

4. Собрать код с plusDays/minusMinutes

id: 40523_ld_lt_05_build_parts_plusminus

Из предложенных строк соберите корректную Java-программу, которая создаёт дату 2023-01-01, прибавляет к ней 5 дней, создаёт время 10:30, вычитает 15 минут и выводит оба результата. Одна из строк лишняя и в решение входить не должна. Порядок импортов и строк вывода может быть любым, но все остальные строки должны следовать в логическом порядке.

Перетяните в правильном порядке строки из одного блока в другой
import java.time.LocalDate;
import java.time.LocalTime;
public class Main {
    public static void main(String[] args) {
        System.out.println(LocalDate.of(2023, 1, 1).plusDays(5));
        System.out.println(LocalTime.of(10, 30).minusMinutes(15));
    }
}
        System.out.println(LocalDate.now());
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

5. Отметить места, где создается новый объект

id: 40523_ld_lt_06_click_target_immutable

Внимательно изучите приведённый фрагмент кода на Java, использующий классы LocalDate и LocalTime. Ваша задача — отметить (кликнуть) все выражения-вызовы методов, которые возвращают новый объект LocalDate или LocalTime. Помните, что эти классы являются неизменяемыми (immutable), поэтому методы, которые кажутся изменяющими дату или время (например, plusDays, withDayOfMonth, plusHours), на самом деле возвращают новый объект. Не отмечайте вызовы методов, которые возвращают примитивные типы (например, int) или другие объекты, а также не отмечайте объявления переменных, присваивания или статические вызовы (например, now()).

Кликните по всем фрагментам, которые подходят под условие задания.
LocalDate startDate = LocalDate.now();
LocalTime startTime = LocalTime.now();

// Изменяем дату и время, создавая новые объекты
LocalDate nextWeek = {{startDate.plusWeeks(1)~|~t1}};
LocalDate firstDayOfMonth = {{startDate.withDayOfMonth(1)~|~t2}};
int currentDay = {{startDate.getDayOfMonth()~|~t3}};

LocalTime meetingTime = {{startTime.plusHours(2)~|~t4}};
LocalTime adjustedTime = {{startTime.withHour(9)~|~t5}};
int currentHour = {{startTime.getHour()~|~t6}};

// Сохраняем результаты в новые переменные
LocalDate finalDate = nextWeek.withDayOfMonth(15);
LocalTime finalTime = meetingTime.plusMinutes(30);
Сообщения
Проверить
Показать подсказку

6. Сколько дней между датами

id: 40523_ld_lt_07_give_result_until

Проанализируйте приведённый фрагмент кода на Java. В программе создаются два объекта LocalDate с фиксированными значениями, затем вычисляется количество дней между ними с помощью метода until() и константы ChronoUnit.DAYS. Определите, какое целое число будет выведено на экран в результате выполнения этого кода. Введите только это число в поле ответа.

Что должно получиться?
import java.time.LocalDate;
import java.time.temporal.ChronoUnit;

public class Main {
    public static void main(String[] args) {
        LocalDate start = LocalDate.of(2023, 5, 10);
        LocalDate end = LocalDate.of(2023, 5, 25);
        long days = start.until(end, ChronoUnit.DAYS);
        System.out.println(days);
    }
}
Сообщения
Проверить
Показать подсказку
НайтиКурс.Ру