Instant и Duration
Машинное время и интервалы
«Instant и Duration» — бесплатный урок Java Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Java Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Java Academy содержит 4 уроков всего.
Машинное время
Если LocalDateTime предназначен для работы с человеческими календарями, то тип Instant представляет точный момент на машинной временной шкале, отсчитываемой от эпохи 1970-01-01 в UTC.
Duration представляет промежуток времени между двумя моментами.
Создание Instant
Instant.now() фиксирует текущий момент. Чтобы получить предсказуемый результат, можно создать значение из фиксированного числа секунд эпохи с помощью ofEpochSecond.
import java.time.Instant;
public class Main {
public static void main(String[] args) {
Instant fixed = Instant.ofEpochSecond(1000000000);
System.out.println(fixed);
}
}Секунды эпохи и миллисекунды
Получить исходные значения эпохи можно с помощью getEpochSecond и toEpochMilli. Это полезно при создании временных отметок и сохранении данных.
import java.time.Instant;
public class Main {
public static void main(String[] args) {
Instant t = Instant.ofEpochSecond(1500000000);
System.out.println(t.getEpochSecond());
System.out.println(t.toEpochMilli());
}
}Создание Duration
Создайте Duration с помощью фабричных методов, таких как ofHours, ofMinutes и ofSeconds.
import java.time.Duration;
public class Main {
public static void main(String[] args) {
Duration d = Duration.ofMinutes(90);
System.out.println(d);
System.out.println(d.toHours());
}
}Промежуток между моментами
Duration.between измеряет промежуток между двумя моментами. Это стандартный способ определить, сколько времени заняло выполнение операции.
import java.time.Duration;
import java.time.Instant;
public class Main {
public static void main(String[] args) {
Instant start = Instant.ofEpochSecond(1000);
Instant end = Instant.ofEpochSecond(1075);
Duration elapsed = Duration.between(start, end);
System.out.println(elapsed.getSeconds());
}
}Преобразование Duration
Duration может представить свою величину в разных единицах с помощью toMinutes, toHours, toDays и toMillis.
import java.time.Duration;
public class Main {
public static void main(String[] args) {
Duration d = Duration.ofSeconds(7320);
System.out.println(d.toMinutes());
System.out.println(d.toHours());
}
}Добавление к Instant
Сместить момент времени вперёд или назад можно с помощью plus и minus, передав им Duration.
import java.time.Duration;
import java.time.Instant;
public class Main {
public static void main(String[] args) {
Instant now = Instant.ofEpochSecond(1000);
Instant later = now.plus(Duration.ofHours(2));
System.out.println(later.getEpochSecond());
}
}Вспомогательные методы plus
Вспомогательные методы, такие как plusSeconds и plusMillis, позволяют не создавать Duration для простых смещений.
import java.time.Instant;
public class Main {
public static void main(String[] args) {
Instant t = Instant.ofEpochSecond(0);
System.out.println(t.plusSeconds(3600).getEpochSecond());
}
}Сравнение моментов
Используйте isBefore и isAfter, чтобы определить порядок двух моментов на временной шкале.
import java.time.Instant;
public class Main {
public static void main(String[] args) {
Instant a = Instant.ofEpochSecond(100);
Instant b = Instant.ofEpochSecond(200);
System.out.println(a.isBefore(b));
}
}Отрицательные Duration
Если конечный момент наступает раньше начального, длительность будет отрицательной. Методы isNegative и abs помогают обработать такую ситуацию.
import java.time.Duration;
import java.time.Instant;
public class Main {
public static void main(String[] args) {
Duration d = Duration.between(Instant.ofEpochSecond(200), Instant.ofEpochSecond(100));
System.out.println(d.isNegative());
System.out.println(d.abs().getSeconds());
}
}Instant и LocalDateTime
Используйте Instant для временных отметок, ведения журналов и измерения прошедшего времени, поскольку он однозначно задаёт время в UTC. Используйте LocalDateTime для календарных значений, предназначенных для человека, если часовой пояс обрабатывается в другом месте.
Быстрая проверка
Проверьте, насколько хорошо Вы поняли Instant и Duration.
Итоги
Вы узнали о машинном времени:
Instantпредставляет точный момент на временной шкале UTC, отсчитываемой от эпохи 1970 годаDurationпредставляет величину времени и создаётся с помощьюofHoursи похожих методовDuration.betweenизмеряет прошедшее время- Смещайте моменты с помощью
plusиminus - Используйте
Instantдля временных отметок, аLocalDateTime— для человеческих календарных дат
Часто задаваемые вопросы
Урок «Instant и Duration» бесплатный?
Да — полный текст урока «Instant и Duration» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Java Academy, подпишись на CoddyKit PRO. Курс Java Academy содержит 4 уроков всего.
Чему я научусь в уроке «Instant и Duration»?
Машинное время и интервалы Ты практикуешь Java Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Java Academy?
Предыдущий опыт не требуется. Java Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Instant и Duration»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Java Academy?
Да. Каждый урок Java Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- LocalDate, LocalTime, LocalDateTime
- Instant и Duration
- Period и арифметика дат
- Форматирование с DateTimeFormatter