Golang: trabalhando com datas

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.

Banner de divulgação da Imersão IA da Alura em colaboração com o Google. Mergulhe em Inteligência artificial com a Alura e o Google. Serão cinco aulas gratuitas para você aprender a usar IA na prática e desenvolver habilidades essenciais para o mercado de trabalho. Inscreva-se gratuitamente agora!

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 editarcódigo
dia (com zero)02
dia (sem o zero)2
dia da semana (inteiro)Monday
dia da semana abreviadoMon
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!

Guilherme Lima
Guilherme Lima

Guilherme é desenvolvedor de software formado em Sistemas de Informação e possui experiência em programação usando diferentes tecnologias como Python, Javascript e Go. Criador de mais de 30 cursos de diferentes áreas da plataforma com foco no treinamento de profissionais de TI, como Data Science, Python para web com Django e Django Rest, jogos com Javascript, Infraestrutura como código com Terraform e Ansible, Orientação a Objetos com Go. Além disso, é um dos instrutores da Imersão Dev da Alura.

Veja outros artigos sobre Programação