Golang: trabalhando com datas
Neste artigo veremos como editar Datas em Golang, sem depender de Strings.
Considere que uma empresa de estacionamento registra o dia e a hora de entrada e saída dos carros manualmente, inserindo no sistema cada informação em um campo separado:
package main
import (
"fmt"
)
func main() {
data := "10/Jun/2019 - 08:30:45"
fmt.Println(data)
}
Tendo como saída o seguinte resultado:
10/Jun/2019 - 08:30:45
Atualmente, o valor recebido de data e hora está contido em uma string
. Com isto podemos colocar qualquer valor nela, ou seja, ela pode receber tanto um texto quanto um número e isso pode ser um problema.
Geralmente, as linguagem de programação tem suas próprias libs para auxiliar este trabalho, como DateTime no C#, ou Date do Python e no Golang não é diferente.
Formatação de data e hora
No Golang temos o pacote Time, que contém algumas funções para trabalhar com data e hora, além de facilitar a nossa vida durante formatação que vai ser exibida para o usuário.
import (
"fmt"
"time"
)
Agora que importamos o pacote time
dentro do nosso código, podemos fazer uso de suas funções.
Utilizando o time Now()
No lugar de escrever a data e a hora em uma string, vamos utilizar a função time.Now():
func main() {
data := time.Now()
fmt.Println(data)
}
E temos como resultado:
2019-05-03 10:29:46.986583 -0300 -03 m=+0.000178751
Observe que temos informações demais aqui e este não é o resultado que nós gostaríamos.
Formatando datas com Golang
Quando queremos formatar em Golang, utilizamos a palavra format, seguido de algo bem diferente de outras linguagens de programação. Isso porque os formatos de data e hora parecem com a data e hora reais e não Y-m-d H:i:s
como no PHP, por exemplo.
Vejamos então o que queremos editar e o em código Go:
O que queremos editar | código |
---|---|
dia (com zero) | 02 |
dia (sem o zero) | 2 |
dia da semana (inteiro) | Monday |
dia da semana abreviado | Mon |
mês com número (com zero) | 01 |
mês com número (sem zero) | 1 |
mês (nome inteiro) | January |
mês (nome abreviado) | Jan |
ano (inteiro) | 2006 |
ano (abreviado) | 06 |
hora (com zero) | 03 |
hora (sem zero) | 3 |
hora (formato 24 horas) | 15 |
minutos (com zero) | 04 |
minutos (sem zero) | 4 |
segundos (com zero) | 05 |
segundos (sem zero) | 5 |
Certo, mas como fica o nosso código?
package main
import (
"fmt"
"time"
)
func main() {
data := time.Now()
fmt.Println(data.Format(("02/Jan/2006 15:04:05 ")))
}
E nosso resultado será:
03/May/2019 11:30:11
Você pode acessar o código neste link:
Para deixar claro a diferença de trabalhar com data utilizando Golang e outras linguagens, comparamos com as linguagens Java e C:
GO:
2006-01-02
20060102
January 02, 2006
02 January 2006
02-Jan-2006
01/02/2006
01/02/06
010206
Jan-02-06
Jan-02-2006
06
Mon
Monday
Jan-06
Java:
yyyy-MM-dd
yyyyMMdd
MMMM dd, yyyy
dd MMMM yyyy
dd-MMM-yyyy
MM/dd/yy
MM/dd/yyyy
MMddyy
MMM-dd-yy
MMM-dd-yyyy
yy
EEE
EEEE
MMM-yy
C:
%F
%Y%m%d
%B %d, %Y
%d %B %Y
%d-%b-%Y
%D
%m/%d/%Y
%m%d%y
%b-%d-%y
%b-%d-%Y
%y
%a
%A
%b-%y
Conclusão
Não precisamos manipular nossas datas usando o tipo String. Podemos usar um tipo preparado para trabalhar com datas e tempo no Golang: Time,, que formata nossa lista de uma maneira mais padronizada e de fácil compreensão.
E aí, o que achou do artigo? Fica até mais fácil trabalhar com datas no Golang agora, não acha? Se quiser continuar estudando sobre o assunto, dê uma olhada em nosso curso na Alura de GO lang continue aprendendo ainda mais!