Универсальный момент на шкале UTC в Java
Instant хранит точку на шкале времени в UTC:
секунды и доли секунды от эпохи 1970-01-01.
Календарного дня или часового пояса в самом значении
нет, зато один формат подходит для логов и обмена
между серверами.
Текущий момент берут статическим now. Из него
читают целые секунды epoch и наносекунды:
import java.time.Instant;
public class Main {
public static void main(String[] args) {
Instant tick = Instant.now();
long sec = tick.getEpochSecond();
int nano = tick.getNano();
System.out.println(sec);
System.out.println(nano);
}
}
Конкретную отметку задают через ofEpochSecond
или разбор ISO-строки:
import java.time.Instant;
public class Main {
public static void main(String[] args) {
Instant fromSec = Instant.ofEpochSecond(1_700_000_000L);
Instant fromText = Instant.parse("2024-01-15T10:00:00Z");
System.out.println(fromSec);
System.out.println(fromText);
}
}
Сравнение идет через isBefore, isAfter
или compareTo. Разницу между двумя моментами
дает Duration.between:
import java.time.Duration;
import java.time.Instant;
public class Main {
public static void main(String[] args) {
Instant start = Instant.parse("2024-06-01T08:00:00Z");
Instant end = Instant.parse("2024-06-01T09:30:00Z");
Duration gap = Duration.between(start, end);
System.out.println(gap.toMinutes());
}
}
Чтобы показать момент человеку, его переводят в
локальное или зонированное время через atZone.
Обратный путь из LocalDateTime требует явного
пояса, иначе смысл отметки теряется.
Выведите текущий Instant и его epoch в секундах.
Сравните текущий момент с отметкой час назад и
выведите true, если текущий позже.