Функция time.Until

Функция time.Until вычисляет длительность времени, оставшуюся до указанного момента времени. Она возвращает значение типа time.Duration, которое представляет собой количество времени между текущим моментом и переданным в параметре временем. Если переданное время уже наступило, функция возвращает отрицательное значение продолжительности.

Синтаксис

gotime.Until(t)

Функция принимает один параметр — значение типа time.Time, представляющее будущий момент времени. Возвращаемое значение — time.Duration, которое можно использовать для ожидания или вычислений.

Пример

Давайте вычислим время до ближайшей минуты в будущем:

gopackage main

import (
  "fmt"
  "time"
)

func main() {
  now := time.Now()
  future := now.Add(1 * time.Minute)
  duration := time.Until(future)
  fmt.Println(duration)
}

Результат выполнения кода:

go"1m0s"

Пример

Давайте проверим, что возвращает функция, если переданное время уже прошло:

gopackage main

import (
  "fmt"
  "time"
)

func main() {
  now := time.Now()
  past := now.Add(-5 * time.Minute)
  duration := time.Until(past)
  fmt.Println(duration)
}

Результат выполнения кода:

go"-5m0s"

Обратите внимание: значение отрицательное, что указывает на то, что указанный момент времени уже наступил.

Пример

Давайте используем time.Until для создания таймера, который сработает через определенное время:

gopackage main

import (
  "fmt"
  "time"
)

func main() {
  targetTime := time.Now().Add(2 * time.Second)
  duration := time.Until(targetTime)
  timer := time.NewTimer(duration)
  <-timer.C
  fmt.Println("Timer fired!")
}

Результат выполнения кода:

go"Timer fired!"

В этом примере мы создаем таймер, который сработает через две секунды, и используем time.Until для вычисления задержки.

Пример

Давайте сравним time.Until с альтернативным способом вычисления разницы через time.Now:

gopackage main

import (
  "fmt"
  "time"
)

func main() {
  future := time.Now().Add(10 * time.Second)
  untilResult := time.Until(future)
  subResult := future.Sub(time.Now())
  fmt.Println(untilResult == subResult)
}

Результат выполнения кода:

go"true"

Функция time.Until — это сокращенная запись выражения t.Sub(time.Now()), и она возвращает тот же результат.

Смотрите также

  • функцию time.Since,
    которая вычисляет время, прошедшее с указанного момента
  • функцию time.Time.Sub,
    которая возвращает разницу между двумя моментами времени
  • функцию time.Now,
    которая возвращает текущее локальное время
  • функцию time.Time.Add,
    которая добавляет длительность к моменту времени