Uso del paquete time en Go

  1. Uso básico

El tipo time.Time representa un momento específico. Podemos obtener el objeto de tiempo actual con la función time.Now() y extraer información como año, mes, día, hora, minutos y segundos. Aquí hay un ejemplo:

package main

import (
	"fmt"
	"time"
)

func main() {
	momentoActual := time.Now()
	fmt.Println(momentoActual)
	anio := momentoActual.Year()
	mes := momentoActual.Month()
	dia := momentoActual.Day()
	hora := momentoActual.Hour()
	minuto := momentoActual.Minute()
	segundo := momentoActual.Second()
	fmt.Printf("%v-%v-%v %v:%v:%v", anio, mes, dia, hora, minuto, segundo)
}

  1. Timestamps

Un timestamp es el número total de milisegundos desde el 1 de enero de 1970 (GMT). También se conoce como Unix Timestamp.

Para obtener el timestamp a partir de un objeto de tiempo:

package main

import (
	"fmt"
	"time"
)

func main() {
	momentoActual := time.Now()
	timestampSeg := momentoActual.Unix()       // En segundos
	timestampMiliseg := momentoActual.UnixMilli() // En milisegundos
	timestampMicroseg := momentoActual.UnixMicro() // En microsegundos
	timestampNanoseg := momentoActual.UnixNano()   // En nanosegundos

	fmt.Println(timestampSeg)
	fmt.Println(timestampMiliseg)
	fmt.Println(timestampMicroseg)
	fmt.Println(timestampNanoseg)
}


Para convertir un timestamp a formato de tiempo:

package main

import (
	"fmt"
	"time"
)

func main() {
	momentoActual := time.Now()
	timestamp := momentoActual.Unix()
	tiempoObjeto := time.Unix(timestamp, 0)

	fmt.Println(tiempoObjeto)
	anio := tiempoObjeto.Year()
	mes := tiempoObjeto.Month()
	dia := tiempoObjeto.Day()
	hora := tiempoObjeto.Hour()
	minuto := tiempoObjeto.Minute()
	segundo := tiempoObjeto.Second()
	fmt.Printf("%v-%v-%v %v:%v:%v", anio, mes, dia, hora, minuto, segundo)
}

  1. Duraciones

time.Duration es un tipo que representa el intervalo entre dos momentos en nanosegundos. Las constatnes definidas en el paquete time incluyen:

const (
	Nanosecond  time.Duration = 1
	Microsecond               = 1000 * Nanosecond
	Millisecond               = 1000 * Microsecond
	Second                   = 1000 * Millisecond
	Minute                   = 60 * Second
	Hour                     = 60 * Minute
)

  1. Operaciones de tiempo

4.1 Sumar tiempo

Para sumar una duración a un objeto de tiempo:

package main

import (
	"fmt"
	"time"
)

func main() {
	momentoActual := time.Now()
	nuevoMomento := momentoActual.Add(24 * time.Hour)
	fmt.Println(nuevoMomento)
}

4.2 Restar tiempo

Para calcluar la diferencia entre dos objetos de tiempo:

package main

import (
	"fmt"
	"time"
)

func main() {
	inicio := time.Now()
	fin := time.Now()
	diferencia := fin.Sub(inicio)
	fmt.Println(diferencia)
}

4.3 Comparaciones

Para comparar si dos tiempos son iguales:

func (t time.Time) Equal(u time.Time) bool

Para verificar si un tiempo es anterior o posterior a otro:

func (t time.Time) Before(u time.Time) bool
func (t time.Time) After(u time.Time) bool

  1. Formateo de tiempo

El método Format permite formatear un objeto de tiempo según una plantilla específica:

package main

import (
	"fmt"
	"time"
)

func main() {
	momentoActual := time.Now()
	fmt.Println(momentoActual.Format("2006-01-02"))
	fmt.Println(momentoActual.Format("2006年01月02日"))
	fmt.Println(momentoActual.Format("2006-01-02 15:04:05"))
	fmt.Println(momentoActual.Format("2006-01-02 03:04:05 PM"))
	fmt.Println(momentoActual.Format("2006-01-02 15:04:05.0000"))
	fmt.Println(momentoActual.Format("2006-01-02 15:04:05.9999"))
	fmt.Println(momentoActual.Format("15:04:05"))
	fmt.Println(momentoActual.Format("2006.01.02"))
}

  1. Conversión de cadenas a tiempo

Para convertir una cadena en un objeto de teimpo:

package main

import (
	"fmt"
	"time"
)

func main() {
	tiempoStr := "2022-03-19 00:10:42.96"
	formato := "2006-01-02 15:04:05.9999"
	tiempoObjeto, err := time.Parse(formato, tiempoStr)
	if err != nil {
		fmt.Println("Error:", err)
		return
	}
	fmt.Println(tiempoObjeto)
}

  1. Zonas horarias

Para trabajar con zonas horarias específicas:

package main

import (
	"fmt"
	"time"
)

func main() {
	zona, _ := time.LoadLocation("Asia/Shanghai")
	tiempoShanghai := time.Date(2022, 3, 15, 20, 3, 4, 0, zona)
	fmt.Println(tiempoShanghai)
}

  1. Dormir

Para hacer que un programa espere un período específico:

package main

import (
	"time"
)

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

Etiquetas: Go time TimeZone

Publicado el 7-28 06:06