Como analisar a seqüência de datas em Go

  1. Representação de data e hora em Go
  2. Analisar string de data no Go

A análise de data é uma das tarefas mais comuns encontradas no mundo da programação. Go usa uma data padrão, ao contrário de outras linguagens de programação que usam códigos para representar partes de uma representação de string de data/hora. A análise em Go é feita com a ajuda das funções Parse e Format no pacote time.

Representação de data e hora em Go

Para analisar a data em Go, utilizamos algo chamado layout. Há um tempo padrão em Go que precisamos lembrar enquanto analisamos as datas em Go:

Mon Jan 2 15:04:05 MST 2006

É Mon Jan 2 15:04:05 MST 2006.

Analisar string de data no Go

Para analisar uma seqüência de datas, passamos este layout para a função time.Parse. Utilizamos o formato em tempo real sem especificar a data utilizando letras na função parse, o que torna a função parse bastante interessante.

A função time.Parse tem como primeiro argumento o layout que consiste no formato de tempo, o espaço reservado ao lugar e a string formatada representando o tempo 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)
}

Resultado:

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 tem algum layout de tempo predefinido constante em seu pacote.

Constante Layout
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"

Poderíamos usar a constante predefinida como acima, em vez da seqüência de layout, para analisar a data e a hora.

package main

import (
    "fmt"
    "time"
)

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

Resultado:

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

Se tivermos um tipo time.Time, utilizamos a função Format para convertê-la em um string.

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

}

Resultado:

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

Artigo relacionado - Go String

  • Como Converter um Valor Intensivo em String em Go