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