Научитесь добавлять или вычитать часы, минуты или секунды из заданной даты и времени в Java, используя различные классы даты и времени. Если вам требуется добавить или вычесть дни и месяцы, прочтите связанную статью.
1. Добавьте или вычтите время с Java 8
Использование нового API Date является рекомендуемым подходом, если мы используем JDK 1.8 или более позднюю версию.
1.1 Основные классы
Следующие классы являются частью нового API, который может хранить и обрабатывать информацию о времени для заданной даты.
Класс Duration представляет количество времени в секундах и наносекундах, и к нему можно получить доступ с помощью других единиц, основанных на длительности, таких как минуты и часы. Мы можем добавлять или вычитать Duration из любого класса выше.
1.2. Добавление часов, минут и секунд
Классы LocalDateTime, ZoneDateTime и OffsetDateTime являются неизменяемым представлением даты-времени с точностью до наносекунд. Эти классы поддерживают методы plus для добавления времени к дате.
- plusHours(n) : возвращает копию указанного объекта даты и времени с добавленными 'n' часами.
- plusMinutes(n) : возвращает копию указанного объекта даты и времени с добавленными 'n' минутами.
- plusSeconds(n) : возвращает копию указанного объекта даты и времени с добавленными 'n' секундами.
- plusNanos(n) : возвращает копию указанного объекта даты и времени с добавленными 'n' наносекундами.
- plus(duration) : возвращает копию указанного объекта даты и времени с добавленной указанной длительностью.
- plus(n, temporalUnit) : возвращает копию указанного объекта даты и времени с добавленным количеством указанных единиц измерения «n».
Программа Java для добавления часов и других единиц времени к заданной дате-времени. Мы пишем примеры с использованием класса LocalDateTime, но все операторы действительны для классов ZoneDateTime и OffsetDateTime.
LocalDateTime updatedTimeLocalDateTime now = LocalDateTime.now();updatedTime = now.plusHours(2);updatedTime = now.plusMinutes(20);updatedTime = now.plusSeconds(300);updatedTime = now.plus(Duration.ofMillis(8000));updatedTime = now.plus(20, ChronoUnit.HOURS);
Класс Instant предназначен для представления даты. Он предназначен для представления одной мгновенной точки на временной шкале или секунд эпохи. Он не предоставляет методы plusHours и plusMinutes.
Instant updatedInstant;Instant currentInstant = Instant.parse("2022-06-24T05:12:35Z");updatedInstant = currentInstant.plus(2, ChronoUnit.HOURS);updatedInstant = currentInstant.plus(30, ChronoUnit.MINUTES);updatedInstant = currentInstant.plusSeconds(300);updatedInstant = currentInstant.plusMillis(8000updatedInstant = currentInstant.plusNanos(60000
1.3 Вычитание часов, минут и секунд
Подобно методам plus, эти классы предоставляют способ вычитать любое количество времени. Нам нужно использовать методы minus, перечисленные выше.
LocalDateTime updatedTimeLocalDateTime now = LocalDateTime.now();updatedTime = now.minusHours(2);updatedTime = now.minusMinutes(20);updatedTime = now.minusSeconds(300);updatedTime = now.minus(Duration.ofMillis(8000));updatedTime = now.minus(20, ChronoUnit.HOURS);
Аналогично для класса Instant мы можем использовать минус-методы.
Instant updatedInstant;Instant currentInstant = Instant.parse("2022-06-24T05:12:35Z");updatedInstant = currentInstant.minus(2, ChronoUnit.HOURS);updatedInstant = currentInstant.minus(30, ChronoUnit.MINUTES);updatedInstant = currentInstant.minusSeconds(300);updatedInstant = currentInstant.minusMillis(8000updatedInstant = currentInstant.minusNanos(600000);
2. Сложение и вычитание времени – Java 7
Добавление и вычитание времени было возможно через класс Calendar. Не было прямой поддержки в классе Date.
Мы можем использовать метод cal.add(unit, amount) для прибавления и вычитания времени.
- Если сумма была положительным числом, то указанное количество указанной единицы времени добавляется к календарю.
- Если сумма была отрицательным числом, то указанное количество указанной единицы времени вычитается из календаря.
Date date = new Date();Calendar cal = Calendar.getInstance();cal.setTime(date);cal.add(Calendar.HOUR, 2);cal.add(Calendar.MINUTE, -15);cal.add(Calendar.SECOND, 10);
Обратите внимание, что Calendar — это изменяемый объект, поэтому все изменения вносятся в сам данный экземпляр Calendar. Новый экземпляр Calendar не создается.
3. Заключение
В этом уроке мы научились добавлять и вычитать время(в часах, минутах и секундах) из даты в Java. Мы научились использовать новые API Java Date, а также старые устаревшие классы Date и Calendar.