Como analisar a seqüência de datas em 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
Suraj Joshi is a backend software engineer at Matrice.ai.
LinkedIn