1. Класс LocalDateTime

Класс LocalDateTime объединяет в себе возможности классов LocalDate и LocalTime: он хранит и дату, и время. Его объекты тоже неизменяемые, и его методы также аналогичны методам классов LocalDate и LocalTime.

Получение текущего момента: дата и время

Тут все в пределах ожиданий: тоже используется метод now(). Пример:

Код Вывод на экран
LocalDateTime time = LocalDateTime.now();
System.out.println("Сейчас = " + time);

Сейчас = 2019-02-22T09:49:19.275039200

При выводе на экран дата и время разделяются буквой T.

Получение определенного момента: дата и время

Все ожидаемо аналогично классам LocalDate и LocalTime — используется метод of():

... = LocalDateTime.of(год, месяц, день, часы, минуты, секунды);

Сначала идут параметры, которые задают дату в тех же форматах, что и в классе LocalDate. Затем идут параметры, задающие время в тех же форматах, что и в классе LocalTime. Список всех вариаций метода of() приведен ниже:

Методы
of (int year, int month, int day, int hour, int minute)
of (int year, int month, int day, int hour, int minute, int second)
of (int year, int month, int day, int hour, int minute, int second, int nano)
of (int year, Month month, int day, int hour, int minute)
of (int year, Month month, int day, int hour, int minute, int second)
of (int year, Month month, int day, int hour, int minute, int second, int nano)
of (LocalDate date, LocalTime time)

Можно задать дату явно или через объекты LocalDate и LocalTime:

Код
LocalDate date = LocalDate.now();
LocalTime time = LocalTime.now();
LocalDateTime current = LocalDateTime.of(date, time);
System.out.println("Сейчас = " + current);

LocalDateTime date = LocalDateTime.of(2019, Month.MAY, 15, 12, 15, 00);
System.out.println("Сейчас = " + date);
Вывод на экран
Сейчас = 2019-02-22T10:05:38.465675100
Сейчас = 2019-05-15T12:15

У класса LocalDateTime есть методы получения фрагмента даты и/или времени. Они абсолютно аналогичны методам классов LocalDate и LocalTime. Дублировать их тут мы не будем.



2. Класс Instant

Также разработчики Java не забыли интересы и старой школы.

В Date Time API добавили класс Instant для работы со временем, нацеленным на процессы внутри компьютеров. Вместо часов, минут и секунд, он оперирует секундами, миллисекундами и наносекундами.

Этот класс хранит в себе два поля:

  • количество секунд, прошедшее с 1 января 1970 года
  • количество наносекунд

Класс создан для разработчиков? Да. Поэтому он опять считает время в Unix-time: от начала 1970 года.

Можно даже сказать, что класс Instant — это упрощенная версия класса Date: оставили только то, что нужно программистам.

Получить объект Instant можно точно так же, как объект LocalTime:

Instant timestamp = Instant.now();

Где timestamp — это переменная класса Instant, а Instant.now() — вызов статического метода now() у класса Instant.

Пример:

Код Вывод на экран
Instant timestamp = Instant.now();
System.out.println(timestamp);

2019-02-22T08:42:42.234945300Z

Также можно создать новый объект с помощью разновидностей метода of(), если передать в него время, прошедшее с 1 января 1970 года:

ofEpochMilli(long milliseconds)
Нужно передать количество миллисекунд
ofEpochSecond(long seconds)
Нужно передать количество секунд
ofEpochSecond(long seconds, long nanos)
Нужно передать секунды и наносекунды

Методы объектов Instant

У класса Instant есть два метода, которые возвращают его значения:

long getEpochSecond()
Количество секунд, прошедшее с 1 января 1970 года
int getNano()
Наносекунды.
long toEpochMilli()
Количество миллисекунд, прошедшее с 1 января 1970 года

Также есть методы, которые способны создавать новые объекты Instant на основе уже существующего:

Instant plusSeconds(long)
Добавляет секунды к текущему моменту времени
Instant plusMillis(long)
Добавляет миллисекунды
Instant plusNanos(long)
Добавляет наносекунды
Instant minusSeconds(long)
Вычитает секунды
Instant minusMillis(long)
Вычитает миллисекунды
Instant minusNanos(long)
Вычитает наносекунды

Примеры:

Код Вывод на экран
Instant timestamp = Instant.now();
System.out.println(timestamp);

long n = timestamp.toEpochMilli();
Instant time = Instant.ofEpochMilli(n);
System.out.println(time);

2019-02-22T09:01:20.535344Z



2019-02-22T09:01:20.535Z