Тип time.Duration
Тип time.Duration представляет собой промежуток времени
и выражается в наносекундах. Он используется во многих
функциях пакета time, например, для установки
таймаутов, задержек и измерения длительности операций.
Значение типа time.Duration может быть как
положительным, так и отрицательным.
Синтаксис
Значения time.Duration создаются с помощью
числовых литералов с множителями:
const (
dur = 5 * time.Second
)
Также можно преобразовать целое число в
time.Duration:
dur := time.Duration(10) * time.Second
Константы длительности
Пакет time предоставляет константы для
распространенных единиц измерения времени:
time.Nanosecond // 1 наносекунда
time.Microsecond // 1 микросекунда
time.Millisecond // 1 миллисекунда
time.Second // 1 секунда
time.Minute // 1 минута
time.Hour // 1 час
Обратите внимание, что константа time.Minute
равна 60 секундам, а time.Hour - 60 минутам.
Метод Hours
Метод Hours возвращает длительность в часах
как число с плавающей точкой:
package main
import (
"fmt"
"time"
)
func main() {
dur := 2*time.Hour + 30*time.Minute
res := dur.Hours()
fmt.Println(res)
}
Результат выполнения кода:
"2.5"
Метод Minutes
Метод Minutes возвращает длительность в минутах
как число с плавающей точкой:
package main
import (
"fmt"
"time"
)
func main() {
dur := 90 * time.Minute
res := dur.Minutes()
fmt.Println(res)
}
Результат выполнения кода:
"90"
Метод Seconds
Метод Seconds возвращает длительность в секундах
как число с плавающей точкой:
package main
import (
"fmt"
"time"
)
func main() {
dur := 5*time.Second + 500*time.Millisecond
res := dur.Seconds()
fmt.Println(res)
}
Результат выполнения кода:
"5.5"
Метод Milliseconds
Метод Milliseconds возвращает длительность
в миллисекундах как целое число:
package main
import (
"fmt"
"time"
)
func main() {
dur := 2*time.Second + 300*time.Millisecond
res := dur.Milliseconds()
fmt.Println(res)
}
Результат выполнения кода:
"2300"
Метод Nanoseconds
Метод Nanoseconds возвращает длительность
в наносекундах как целое число:
package main
import (
"fmt"
"time"
)
func main() {
dur := 2*time.Microsecond + 500*time.Nanosecond
res := dur.Nanoseconds()
fmt.Println(res)
}
Результат выполнения кода:
"2500"
Метод String
Метод String возвращает строковое представление
длительности в человекочитаемом формате:
package main
import (
"fmt"
"time"
)
func main() {
dur := 3*time.Hour + 15*time.Minute + 30*time.Second
res := dur.String()
fmt.Println(res)
}
Результат выполнения кода:
"3h15m30s"
Метод Truncate
Метод Truncate округляет длительность вниз
до ближайшего значения, кратного переданной длительности:
package main
import (
"fmt"
"time"
)
func main() {
dur := 2*time.Hour + 45*time.Minute + 30*time.Second
res := dur.Truncate(time.Hour)
fmt.Println(res)
}
Результат выполнения кода:
"2h0m0s"
Метод Round
Метод Round округляет длительность до ближайшего
значения, кратного переданной длительности:
package main
import (
"fmt"
"time"
)
func main() {
dur := 2*time.Hour + 45*time.Minute + 30*time.Second
res := dur.Round(time.Hour)
fmt.Println(res)
}
Результат выполнения кода:
"3h0m0s"
Метод Abs
Метод Abs возвращает абсолютное значение
длительности:
package main
import (
"fmt"
"time"
)
func main() {
dur := -10 * time.Second
res := dur.Abs()
fmt.Println(res)
}
Результат выполнения кода:
"10s"
Пример с таймаутом
Рассмотрим использование time.Duration для
установки таймаута операции:
package main
import (
"fmt"
"time"
)
func main() {
timeout := 5 * time.Second
// Имитация длительной операции
select {
case <-time.After(timeout):
fmt.Println("Operation timed out")
}
}
Результат выполнения кода:
"Operation timed out"
Сравнение длительностей
Значения time.Duration можно сравнивать
с помощью обычных операторов сравнения:
package main
import (
"fmt"
"time"
)
func main() {
dur1 := 10 * time.Second
dur2 := 5 * time.Second
if dur1 > dur2 {
fmt.Println("dur1 is longer")
}
}
Результат выполнения кода:
"dur1 is longer"
Смотрите также
-
тип
time.Time,
который представляет момент времени -
функцию
time.ParseDuration,
которая разбирает строку в длительность -
метод
time.Time.Sub,
который вычисляет разницу между двумя моментами времени -
метод
time.Time.Add,
который добавляет длительность к моменту времени