пятница, 24 июля 2020 г.

Пакет time в Golang, тип Duration и функции работающие с ним

type Duration int64

Duration представляет прошедшее время между двумя моментами в виде подсчета int64 наносекунд. Представление ограничивает наибольшую представляемую продолжительность приблизительно 290 годами.

package main

import (
    "fmt"
    "time"
)

func expensiveCall() {
    time.Sleep(3 * time.Second)
}

func main() {
    t0 := time.Now()
    expensiveCall()
    t1 := time.Now()
    fmt.Printf("Вызов занимает %v для выполнения.\n", 
               t1.Sub(t0))
}

Вывод:

Вызов занимает 3.000154165s для выполнения.

Функция ParseDuration

func ParseDuration(s string) (Duration, error)

ParseDuration анализирует строку продолжительности. Строка продолжительности - это, возможно, последовательность десятичных чисел со знаком, каждое из которых содержит необязательную дробь и суффикс единицы, например "300ms", "-1.5h" или "2h45m". Допустимые единицы времени: "ns", "us" (или "µs"), "ms", "s", "m", "h".

Пример использования ParseDuration

package main

import (
    "fmt"
    "time"
)

func main() {
    hours, _ := time.ParseDuration("10h")
    complex, _ := time.ParseDuration("1h10m10s")
    micro, _ := time.ParseDuration("1µs")
    // Функция также принимает некорректный, 
    // но принятый префикс для micro.
    micro2, _ := time.ParseDuration("1us")

    fmt.Println(hours)
    fmt.Println(complex)
    fmt.Printf("%.0f секунд в %v.\n", 
               complex.Seconds(), complex)
    fmt.Printf("%d наносекунд в %v.\n", 
               micro.Nanoseconds(), micro)
    fmt.Printf("%6.2e секунд в %v.\n", 
               micro2.Seconds(), micro)
}

Вывод:

10h0m0s
1h10m10s
4210 секунд в 1h10m10s.
1000 наносекунд в 1µs.
1.00e-06 секунд в 1µs.

Функция Since

func Since(t Time) Duration

Since возвращает время, прошедшее с момента t. Это сокращение для time.Now().Sub(t).

Пример использования Since

package main

import (
    "fmt"
    "time"
)

func main() {
    t := time.Now()
    time.Sleep(3 * time.Second)
    fmt.Printf("Прошло %v \n", time.Since(t))
}

Вывод:

Прошло 3s 

Функция Until (с версии Go 1.8)

func Until(t Time) Duration

Until возвращает продолжительность до t. Это сокращение для t.Sub(time.Now()).

Пример использования Until

package main

import (
    "fmt"
    "time"
)

func main() {
    t := time.Now()
    time.Sleep(3 * time.Second)
    fmt.Printf("Осталось %v \n", time.Until(t))
}

Вывод:

Осталось -3s 


Читайте также:


Комментариев нет:

Отправить комментарий