0Pricing
Java Academy · Урок

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 — локальная установка не требуется.

Все уроки этого курса

  1. LocalDate, LocalTime, LocalDateTime
  2. Instant и Duration
  3. Period и арифметика дат
  4. Форматирование с DateTimeFormatter
← Назад к Java Academy