Java for Beginner
675 subscribers
558 photos
156 videos
12 files
852 links
Канал от новичков для новичков!
Изучайте Java вместе с нами!
Здесь мы обмениваемся опытом и постоянно изучаем что-то новое!

Наш YouTube канал - https://www.youtube.com/@Java_Beginner-Dev

Наш канал на RUTube - https://rutube.ru/channel/37896292/
Download Telegram
Класс Instant и TemporalAdjusters

Класс Instant и временные метки

Instant — это класс из Java Time API (пакет java.time), который представляет собой точку на временной шкале. Он хранит количество секунд и наносекунд, прошедших с эпохи Unix (1 января 1970 года, 00:00:00 UTC). Это делает его аналогом временных меток (timestamp), которые часто используются в системах для фиксации моментов времени.

Как работает
Instant под капотом?

Внутри Instant хранит два поля:
long seconds — количество секунд с эпохи Unix.
int nanos — количество наносекунд (от 0 до 999,999,999), чтобы обеспечить точность до наносекунд.
Методы getEpochSecond() и getNano() позволяют получить эти значения.


Пример использования Instant:
import java.time.Instant;

public class InstantExample {
public static void main(String[] args) {
// Получаем текущий момент времени
Instant now = Instant.now();
System.out.println("Текущий момент: " + now);

// Получаем количество секунд с эпохи Unix
long epochSecond = now.getEpochSecond();
System.out.println("Секунд с эпохи Unix: " + epochSecond);

// Получаем наносекунды
int nano = now.getNano();
System.out.println("Наносекунды: " + nano);
}
}


Плюсы Instant:
Высокая точность (до наносекунд).
Независимость от временных зон (всегда в UTC).
Удобен для хранения и передачи временных меток.


Минусы Instant:
Не подходит для работы с человеко-читаемыми датами и временем (например, "2023-10-15 14:30").
Требует конвертации для отображения в локальных временных зонах.


Использование TemporalAdjusters

TemporalAdjusters — это утилитный класс, который предоставляет готовые методы для выполнения сложных операций с датами. Например, он позволяет находить "следующий понедельник", "последний день месяца" и т.д.

Как работает TemporalAdjusters?

Каждый метод TemporalAdjusters возвращает объект TemporalAdjuster, который можно передать в метод with() классов LocalDate, LocalDateTime и других.

Пример использования TemporalAdjusters:
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.temporal.TemporalAdjusters;

public class TemporalAdjustersExample {
public static void main(String[] args) {
// Текущая дата
LocalDate today = LocalDate.now();
System.out.println("Сегодня: " + today);

// Следующий понедельник
LocalDate nextMonday = today.with(TemporalAdjusters.next(DayOfWeek.MONDAY));
System.out.println("Следующий понедельник: " + nextMonday);

// Последний день месяца
LocalDate lastDayOfMonth = today.with(TemporalAdjusters.lastDayOfMonth());
System.out.println("Последний день месяца: " + lastDayOfMonth);
}
}


Плюсы TemporalAdjusters:
Упрощает сложные операции с датами.
Читаемый и понятный код.
Гибкость: можно создавать собственные TemporalAdjuster.


Минусы TemporalAdjusters:
Ограниченный набор стандартных методов (например, нет встроенной поддержки для "первого вторника месяца").
Требует понимания временных типов (LocalDate, LocalDateTime и т.д.).


#Java #Training #Medium #Date #Instant #TemporalAdjusters