Функция time.Until
Функция time.Until вычисляет длительность времени,
оставшуюся до указанного момента времени.
Она возвращает значение типа time.Duration,
которое представляет собой количество времени между текущим моментом
и переданным в параметре временем.
Если переданное время уже наступило, функция возвращает отрицательное
значение продолжительности.
Синтаксис
time.Until(t)
Функция принимает один параметр — значение типа time.Time,
представляющее будущий момент времени.
Возвращаемое значение — time.Duration,
которое можно использовать для ожидания или вычислений.
Пример
Давайте вычислим время до ближайшей минуты в будущем:
package main
import (
"fmt"
"time"
)
func main() {
now := time.Now()
future := now.Add(1 * time.Minute)
duration := time.Until(future)
fmt.Println(duration)
}
Результат выполнения кода:
"1m0s"
Пример
Давайте проверим, что возвращает функция, если переданное время уже прошло:
package main
import (
"fmt"
"time"
)
func main() {
now := time.Now()
past := now.Add(-5 * time.Minute)
duration := time.Until(past)
fmt.Println(duration)
}
Результат выполнения кода:
"-5m0s"
Обратите внимание: значение отрицательное, что указывает на то, что указанный момент времени уже наступил.
Пример
Давайте используем time.Until для создания таймера,
который сработает через определенное время:
package 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!")
}
Результат выполнения кода:
"Timer fired!"
В этом примере мы создаем таймер, который сработает через две секунды,
и используем time.Until для вычисления задержки.
Пример
Давайте сравним time.Until с альтернативным способом вычисления
разницы через time.Now:
package 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)
}
Результат выполнения кода:
"true"
Функция time.Until — это сокращенная запись выражения
t.Sub(time.Now()), и она возвращает тот же результат.
Смотрите также
-
функцию
time.Since,
которая вычисляет время, прошедшее с указанного момента -
функцию
time.Time.Sub,
которая возвращает разницу между двумя моментами времени -
функцию
time.Now,
которая возвращает текущее локальное время -
функцию
time.Time.Add,
которая добавляет длительность к моменту времени