Метод Sub
func (t Time) Sub(u Time) Duration
Sub возвращает продолжительность t-u. Если результат превышает максимальное (или минимальное) значение, которое может быть сохранено в Duration, будет возвращена максимальная (или минимальная) продолжительность. Чтобы вычислить t-d для продолжительности d, используйте t.Add(-d).
Пример использования Sub
package main
import (
"fmt"
"time"
)
func main() {
start := time.Date(2000, 1, 1, 0, 0, 0, 0, time.UTC)
end := time.Date(2000, 1, 1, 12, 0, 0, 0, time.UTC)
difference := end.Sub(start)
fmt.Printf("difference = %v\n", difference)
}
Вывод:
difference = 12h0m0s
Метод Truncate
func (t Time) Truncate(d Duration) Time
Truncate возвращает результат округления t до значения, кратного d (начиная с нулевого времени). Если d <= 0, Truncate возвращает t без любых монотонных показаний часов, но в остальном без изменений.
Truncate действует над временем как абсолютной продолжительностью с нулевого времени; он не действует в форме представления времени. Таким образом, Truncate(Hour) может возвращать время с ненулевой минутой, в зависимости от Location времени.
Пример использования Truncate
package main
import (
"fmt"
"time"
)
func main() {
t, _ := time.Parse("2006 Jan 02 15:04:05", "2012 Dec 07 12:15:30.918273645")
trunc := []time.Duration{
time.Nanosecond,
time.Microsecond,
time.Millisecond,
time.Second,
2 * time.Second,
time.Minute,
10 * time.Minute,
}
for _, d := range trunc {
fmt.Printf("t.Truncate(%5s) = %s\n", d,
t.Truncate(d).Format("15:04:05.999999999"))
}
// Чтобы округлить до последней полуночи
// в местном часовом поясе, создаем новую Date.
midnight := time.Date(t.Year(), t.Month(), t.Day(), 0, 0, 0, 0, time.Local)
_ = midnight
}
Вывод:
t.Truncate( 1ns) = 12:15:30.918273645
t.Truncate( 1µs) = 12:15:30.918273
t.Truncate( 1ms) = 12:15:30.918
t.Truncate( 1s) = 12:15:30
t.Truncate( 2s) = 12:15:30
t.Truncate( 1m0s) = 12:15:00
t.Truncate(10m0s) = 12:10:00
Метод Round
func (t Time) Round(d Duration) Time
Round возвращает результат округления t до ближайшего кратного d (начиная с нулевого времени). Поведение при округлении для значений на полпути заключается в округлении. Если d <= 0, Round возвращает t без любых монотонных показаний часов, но в остальном без изменений.
Round действует над временем как абсолютной продолжительностью с нулевого времени; он не действует в форме представления времени. Таким образом, Round(Hour) может возвращать время с ненулевой минутой, в зависимости от Location времени.
Отличие от метода Truncate заключается в том, что Truncate возвращает результат округления t до кратного d, а Round возвращает результат округления t до ближайшего кратного d.
Пример использования Round
package main
import (
"fmt"
"time"
)
func main() {
t := time.Date(0, 0, 0, 12, 15, 30, 918273645, time.UTC)
round := []time.Duration{
time.Nanosecond,
time.Microsecond,
time.Millisecond,
time.Second,
2 * time.Second,
time.Minute,
10 * time.Minute,
time.Hour,
}
for _, d := range round {
fmt.Printf("t.Round(%6s) = %s\n", d, t.Round(d).Format("15:04:05.999999999"))
}
}
Вывод:
t.Round( 1ns) = 12:15:30.918273645
t.Round( 1µs) = 12:15:30.918274
t.Round( 1ms) = 12:15:30.918
t.Round( 1s) = 12:15:31
t.Round( 2s) = 12:15:30
t.Round( 1m0s) = 12:16:00
t.Round( 10m0s) = 12:20:00
t.Round(1h0m0s) = 12:00:00
Читайте также:
- Пакет time в Golang, тип Time, методы After, Before, Equal, IsZero
- Пакет time в Golang, тип Duration и функции работающие с ним
- Пакет time в Golang, тип Time, методы Add, AddDate
- Пакет time в Golang, форматирование Time с помощью метода Format
Комментариев нет:
Отправить комментарий