Cómo analizar la cadena de fechas en Go

  1. Representación de la fecha y la hora en Go
  2. Analizar la cadena de fechas en Go

El análisis sintáctico de la fecha es una de las tareas más comunes en el mundo de la programación. Go utiliza una fecha estándar, a diferencia de otros lenguajes de programación que utilizan códigos para representar partes de una cadena de fecha/hora. El análisis en Go se hace con la ayuda de las funciones Prase y Format en el paquete time.

Representación de la fecha y la hora en Go

Para analizar la fecha en el Go, usamos algo llamado layout. Hay una hora estándar en Go que necesitamos recordar mientras analizamos las fechas en Go:

Mon Jan 2 15:04:05 MST 2006

Es January 2nd, 3:04:05 PM of 2006, UTC-0700.

Analizar la cadena de fechas en Go

Para analizar una cadena de fechas, pasamos este diseño a la función time.Parse. Usamos el tiempo real como formato sin especificar la fecha usando letras en la función parse, lo que hace que la función parse sea bastante interesante.

La función time.Parse toma un diseño que consiste en un marcador de posición de formato de tiempo como primer argumento y una cadena con formato real que representa el tiempo como segundo argumento.

package main

import (
    "fmt"
    "time"
)

func main() {
    timeT, _ := time.Parse("2006-01-02", "2020-04-14")
    fmt.Println(timeT)

    timeT, _ = time.Parse("06-01-02", "20-04-14")
    fmt.Println(timeT)

    timeT, _ = time.Parse("2006-Jan-02", "2020-Apr-14")
    fmt.Println(timeT)

    timeT, _ = time.Parse("2006-Jan-02 Monday 03:04:05", "2020-Apr-14 Tuesday 23:19:25")
    fmt.Println(timeT)

    timeT, _ = time.Parse("2006-Jan-02 Monday 03:04:05 PM MST -07:00", "2020-Apr-14 Tuesday 11:19:25 PM IST +05:30")
    fmt.Println(timeT)
}

Producción:

2020-04-14 00:00:00 +0000 UTC
2020-04-14 00:00:00 +0000 UTC
2020-04-14 00:00:00 +0000 UTC
0001-01-01 00:00:00 +0000 UTC
2020-04-14 23:19:25 +0530 IST

Go tiene una constante de diseño de tiempo predefinida en su paquete.

La constante Diseño
ANSIC "Mon Jan _2 15:04:05 2006"
UnixDate "Mon Jan _2 15:04:05 MST 2006"
RubyDate "Mon Jan 02 15:04:05 -0700 2006"
RFC822 "02 Jan 06 15:04 MST"
RFC822Z "02 Jan 06 15:04 -0700"
RFC850 "Monday, 02-Jan-06 15:04:05 MST"
RFC1123 "Mon, 02 Jan 2006 15:04:05 MST"
RFC1123Z "Mon, 02 Jan 2006 15:04:05 -0700"
RFC3339 "2006-01-02T15:04:05Z07:00"
RFC3339Nano "2006-01-02T15:04:05.999999999Z07:00"
Stamp "3:04PM"
StampMilli "Jan _2 15:04:05.000"
StampMicro "Jan _2 15:04:05.000000"
StampNano "Jan _2 15:04:05.000000000"

Podríamos usar la constante predefinida como arriba en lugar de la cadena de diseño para analizar la fecha y la hora.

package main

import (
    "fmt"
    "time"
)

func main() {
    timeT, _ := time.Parse(time.RFC3339, "2020-04-15T13:45:26Z")
    fmt.Println(timeT)
}

Producción:

2020-04-15 13:45:26 +0000 UTC

Si tenemos un tipo de time.Time, usamos la función Format para convertirlo en una cadena.

package main

import (
    "fmt"
    "time"
)

func main() {
    input := "2020-04-14"
    layout := "2006-01-02"
    t, _ := time.Parse(layout, input)
    fmt.Println(t)
    fmt.Println(t.Format("02-Jan-2006"))

}

Producción:

2020-04-14 00:00:00 +0000 UTC
14-Apr-2020

Artículo relacionado - Go String

  • Cómo concatenar eficientemente las cuerdas en Go
  • Cómo escribir cuerdas multilíneas en Go
  • comments powered by Disqus