Дата и время в Java 8. Операции сложения и вычитания

июня
26
2014

Содержание

В новом Date Time Java 8 API появилось много методов для удобного сложения и вычитания даты и времени. Следует особо отметить группу методов minus и plus, которые позволяют легко изменять каждую составляющую объекта даты и времени. Рассмотрим эти методы подробнее:

LocalDateTime minusYears(long years) Минус указанное количество лет
LocalDateTime minusMonths(long months) Минус указанное количество месяцев
LocalDateTime minusWeeks(long weeks) Минус указанное количество недель
LocalDateTime minusDays(long days) Минус указанное количество дней
LocalDateTime minusHours(long hours) Минус указанное количество часов
LocalDateTime minusMinutes(long minutes) Минус указанное количество минут
LocalDateTime minusSeconds(long seconds) Минус указанное количество секунд
LocalDateTime minusNanos(long nanos) Минус указанное количество наносекунд
LocalDateTime plusYears(long years) Плюс указанное количество лет
LocalDateTime plusMonths(long months) Плюс указанное количество месяцев
LocalDateTime plusWeeks(long weeks) Плюс указанное количество недель
LocalDateTime plusDays(long days) Плюс указанное количество дней
LocalDateTime plusHours(long hours) Плюс указанное количество часов
LocalDateTime plusMinutes(long minutes) Плюс указанное количество минут
LocalDateTime plusSeconds(long seconds) Плюс указанное количество секунд
LocalDateTime plusNanos(long nanos) Плюс указанное количество наносекунд

Классы LocalDate и LocalTime также имеют соответствующие методы plus*() и minus*().

Ниже представлен пример использования методов plus и minus:


import java.time.LocalDateTime;
import java.time.Month;

public class Main {
	public static void main(String[] args) {
		LocalDateTime dateTime = LocalDateTime.of(
				2002, Month.JANUARY, 10, 
				22, 56, 59, 999_999_000
		);
		LocalDateTime twelveYearsAgo = dateTime.minusYears(12);
		System.out.println("12 years ago: " + twelveYearsAgo);
		LocalDateTime modifiedDate = dateTime
			.plusWeeks(2)
			.minusHours(1);
		System.out.println("modified: " + modifiedDate);
	}
}

// output: 
// 12 years ago: 1990-01-10T22:56:59.999999
// modified: 2002-01-24T21:56:59.999999

Так как объекты LocalDateTime являются неизменяемыми, каждый из методов minus и plus возвращает вновь созданный объект LocalDateTime. Поэтому есть возможность создавать цепочки вызовов методов как это показано в примере выше:


dateTime
  .plusWeeks(2)
  .minusHours(1)

Более того, можно использовать и другие операции вместе с операциями сложения и вычитания. Например:


import java.time.LocalDateTime;
import java.time.Month;

public class Main {
	public static void main(String[] args) {
		LocalDateTime dateTime = LocalDateTime
				.of( 2002, Month.JANUARY, 10, 22, 56 )
				.plusWeeks(2)
				.minusHours(1)
				.withMinute(43);
		System.out.println(dateTime);
	}
}

// output:
// 2002-01-24T21:43

Об упомянутой операции with над датой и временем будет рассказано в следующией статье.

< Форматирование даты в Java 8 Дата и время в Java 8. Изменение даты и времени >

Напишите первое сообщение!

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