En el proceso de desarrollo diario, con frecuencia encontrará escenarios que operan a tiempo. El uso del paquete de tiempo en Golang puede implementar fácilmente operaciones relacionadas con el tiempo. Los próximos artículos explicarán el paquete de tiempo en detalle.Este artículo explica el tipo de tiempo.Duración en el paquete de tiempo.
Duración de tiempo
El tipo time.Duration es un tipo int64 con signo, en nanosegundos, que se usa para representar la duración entre dos puntos de tiempo. Los tipos se definen de la siguiente manera:
type Duration int64
El método propio es el siguiente:
- func (d Duration) Hours() float64, devuelve la duración en horas.
- func (d Duración) Minutos() float64, devuelve la duración en minutos.
- func (d Duration) Seconds() float64, devuelve la duración en segundos.
- func (d Duración) Milisegundos() int64, devuelve la duración en milisegundos.
- func (d Duración) Microsegundos() int64, devuelve la duración en microsegundos.
- func (d Duración) Nanosegundos() int64, devuelve la duración en nanosegundos.
- func (d Duration) String() cadena, devuelve una duración de tipo cadena, el formato es "72h3m0.5s". Los ejemplos son los siguientes:
package main
import (
"fmt"
"time"
)
func main() {
a := time.Duration(3) * time.Hour
fmt.Println(a.Hours()) // 3
fmt.Println(a.Minutes()) // 180
fmt.Println(a.Seconds()) //10800
fmt.Println(a.Milliseconds()) //10800000
fmt.Println(a.Microseconds()) //10800000000
fmt.Println(a.Nanoseconds()) //10800000000000
fmt.Println(a.String()) //3h0m0s
}
- func (d Duración) Round(m Duración) Duración, devuelve el resultado de redondear d al múltiplo más cercano de m. Entendamos con un ejemplo:
package main
import (
"fmt"
"time"
)
func main() {
a := time.Duration(10) * time.Minute
// 结果为 10,10 正好是 1 的整数倍
fmt.Println(a.Round(time.Duration(1) * time.Minute))
// 结果为 9,3 的 3 倍是 9,3 的 4 倍是 12,9 和 10 离得更近
fmt.Println(a.Round(time.Duration(3) * time.Minute))
// 结果为 12,4 的 2 倍是 8,4 的 3 倍是 12,距离一样近往上入
fmt.Println(a.Round(time.Duration(4) * time.Minute))
// 结果为 10,10 正好是 5 的整数倍
fmt.Println(a.Round(time.Duration(5) * time.Minute))
// 结果为12, 6 的 1 倍是 6,6 的 2 倍是 12,10 离 12 更近
fmt.Println(a.Round(time.Duration(6) * time.Minute))
}
- func (d Duration) Truncate(m Duration) Duration, que se utiliza para truncar d al múltiplo entero más cercano de m. Entendamos con un ejemplo:
package main
import (
"fmt"
"time"
)
func main() {
a := time.Duration(10) * time.Minute
// 结果为 10,10 正好是 1 的整数倍
fmt.Println(a.Truncate(time.Duration(1) * time.Minute))
// 结果为 9,3 的 3 倍是 9,最接近 10
fmt.Println(a.Truncate(time.Duration(3) * time.Minute))
// 结果为 8,4 的 2 倍是 8,最接近 10
fmt.Println(a.Truncate(time.Duration(4) * time.Minute))
// 结果为 10,10 正好是 5 的整数倍
fmt.Println(a.Truncate(time.Duration(5) * time.Minute))
// 结果为 6,6 的 1 倍是 6,最接近 10
fmt.Println(a.Truncate(time.Duration(6) * time.Minute))
// 结果为 0,11 的 1 倍是11,大于了 10
fmt.Println(a.Truncate(time.Duration(11) * time.Minute))
}
Adición y sustracción
Debido a que time.Duration representa un período de tiempo, puede realizar operaciones de suma y resta en valores de tipo time.Duration, por ejemplo:
package main
import (
"fmt"
"time"
)
func main() {
a := time.Duration(10) * time.Minute
b := time.Duration(10) * time.Second
fmt.Println(a + b)
fmt.Println(a - b)
}