Метод time.Duration.Truncate

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

Синтаксис

goduration.Truncate(interval)

Пример

Давайте усечем длительность 1h30m45s до ближайшего значения, кратного 1h:

gopackage main

import (
  "fmt"
  "time"
)

func main() {
  duration := 1*time.Hour + 30*time.Minute + 45*time.Second
  res := duration.Truncate(time.Hour)
  fmt.Println(res)
}

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

go"1h0m0s"

Пример

Давайте усечем длительность 2h45m30s до ближайшего значения, кратного 30m:

gopackage main

import (
  "fmt"
  "time"
)

func main() {
  duration := 2*time.Hour + 45*time.Minute + 30*time.Second
  res := duration.Truncate(30 * time.Minute)
  fmt.Println(res)
}

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

go"2h30m0s"

Пример

Давайте рассмотрим усечение отрицательной длительности -2h45m30s до ближайшего значения, кратного 30m:

gopackage main

import (
  "fmt"
  "time"
)

func main() {
  duration := -2*time.Hour - 45*time.Minute - 30*time.Second
  res := duration.Truncate(30 * time.Minute)
  fmt.Println(res)
}

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

go"-2h30m0s"

Пример

Давайте усечем длительность до значения, кратного 5s, когда длительность уже кратна этому интервалу:

gopackage main

import (
  "fmt"
  "time"
)

func main() {
  duration := 1*time.Hour + 15*time.Minute
  res := duration.Truncate(15 * time.Minute)
  fmt.Println(res)
}

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

go"1h15m0s"

Пример

Давайте рассмотрим случай, когда интервал усечения меньше или равен нулю:

gopackage main

import (
  "fmt"
  "time"
)

func main() {
  duration := 1*time.Hour + 30*time.Minute
  resZero := duration.Truncate(0)
  resNegative := duration.Truncate(-time.Hour)
  fmt.Println("zero interval:", resZero)
  fmt.Println("negative interval:", resNegative)
}

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

go"zero interval: 1h30m0s"
"negative interval: 1h30m0s"

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

  • метод time.Duration.Round,
    который выполняет округление длительности до ближайшего кратного значения
  • метод time.Duration.Abs,
    который возвращает абсолютное значение длительности
  • метод time.Duration.Hours,
    который возвращает длительность в часах как число с плавающей точкой
  • метод time.Time.Truncate,
    который выполняет усечение времени до ближайшего кратного значения