Explicación detallada del paquete de tiempo en Golang (2): tiempo.Duración

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)
}

Supongo que te gusta

Origin blog.csdn.net/luduoyuan/article/details/131969641
Recomendado
Clasificación