1: Introdução ao Carbon
1.1 Introdução
Um pacote golang simples, semântico e amigável para desenvolvedores para lidar com datas e horas.
Benefícios de usar o Carbon para manipulação de datas e horas:
- Amigável para Desenvolvedores: Carbon oferece uma interface fluente e expressiva para lidar com datas e horas, que é intuitiva para os desenvolvedores.
- Suporte à Internacionalização: Suporta internacionalização, permitindo que você localize suas representações de datas.
- Imutabilidade: As instâncias do Carbon são imutáveis, o que significa que podem ser passadas com segurança sem modificações inesperadas.
- Manipulação de Fuso Horário: O Carbon simplifica a complexidade de gerenciar datas e horas em diferentes fusos horários.
- API Extensiva: Fornece um conjunto abrangente de funções para criar, analisar e formatar datas e horas.
1.2 Guia de Instalação
Instalação para Go versão >= 1.16
Para instalar o pacote Carbon para o Go versão 1.16 ou superior, utilize o seguinte comando:
go get -u github.com/golang-module/carbon/v2
Em seguida, importe o pacote no seu arquivo Go:
import "github.com/golang-module/carbon/v2"
Instalação para Go versão < 1.16
Para versões mais antigas do Go, você ainda pode instalar o Carbon usando:
go get -u github.com/golang-module/carbon
E importá-lo da mesma forma:
import "github.com/golang-module/carbon"
Observe que a v1 não está mais sendo atualizada ativamente, mas será mantida para correções de bugs.
1.3 Configurando Seu Primeiro Projeto Carbon
Configuração básica do Carbon: Uma vez que o Carbon está instalado, você pode começar a usá-lo simplesmente criando uma nova instância do Carbon. Você pode personalizar o Carbon definindo o layout global padrão, fuso horário e localidade para atender às necessidades do seu projeto.
Definindo o layout global padrão, fuso horário e localidade:
carbon.SetDefault(carbon.Default{
Layout: carbon.RFC3339Layout,
Timezone: carbon.PRC,
Locale: "en",
})
Se não definido explicitamente, o Carbon possui configurações padrão para estes valores — Layout: "2006-01-02 15:04:05"
, Timezone: Local
, Locale: "en"
.
2: Operações Básicas do Carbon
2.1 Trabalhando com a Hora Atual
Obtendo a Data e Hora Atuais
Obter a data e hora atuais é uma operação fundamental em muitas aplicações. Com o Carbon, você pode adquirir a instância de data e hora atual chamando o método carbon.Now()
. Vamos ver como buscar a data e hora atuais:
// Obtém a data e hora atuais como uma instância do Carbon.
agora := carbon.Now()
fmt.Println("Data e hora atuais:", agora)
Exibindo Hoje, Ontem e Amanhã
O Carbon oferece uma maneira elegante de trabalhar com datas em relação ao dia atual. Para obter a representação da data e hora de hoje, ontem e amanhã, você pode usar os métodos carbon.Now()
, carbon.Yesterday()
e carbon.Tomorrow()
respectivamente:
// Data e hora de hoje
hoje := carbon.Now()
fmt.Println("Hoje:", hoje.ToDateTimeString())
// Data e hora de ontem
ontem := carbon.Yesterday()
fmt.Println("Ontem:", ontem.ToDateTimeString())
// Data e hora de amanhã
amanhã := carbon.Tomorrow()
fmt.Println("Amanhã:", amanhã.ToDateTimeString())
Os métodos fornecem uma maneira sucinta de interagir com essas referências de data comumente usadas sem cálculos manuais.
Formatação e Representação da Hora Atual
O Carbon facilita diferentes maneiras de formatar e exibir a data e hora. Se você precisa de um formato padrão como ISO8601, um formato personalizado ou uma versão localizada, o Carbon possui métodos para atender a esses requisitos.
Aqui está como você pode formatar a data e hora atuais de várias maneiras:
// Representação padrão da data e hora
fmt.Println("RFC3339:", agora.ToRFC3339String())
fmt.Println("ISO8601:", agora.ToIso8601String())
// Formato personalizado de data e hora
fmt.Println("Personalizado:", agora.Format("Monday, 02-Jan-06 15:04:05 MST"))
// Usando layouts predefinidos
fmt.Println("Formato ANSIC:", agora.ToAnsicString())
fmt.Println("Formato UnixDate:", agora.ToUnixDateString())
fmt.Println("Formato RubyDate:", agora.ToRubyDateString())
fmt.Println("Formato Kitchen:", agora.ToKitchenString())
// Para padrões personalizados, use o método Format
fmt.Println("Padrão personalizado:", agora.Format("2006-01-02 15:04:05"))
Criação de instâncias a partir de timestamps
Em Go, lidar com timestamps é comum, e o Carbon fornece métodos intuitivos para lidar com eles. Um timestamp é uma sequência de caracteres ou informações codificadas identificando quando um determinado evento ocorreu, geralmente fornecendo a data e horário, às vezes precisa até uma pequena fração de segundo.
Para criar uma instância do Carbon a partir de um timestamp Unix, que representa o número de segundos que se passaram desde o início do Unix (meia-noite de 1 de janeiro de 1970, UTC), você pode usar vários níveis de precisão:
// Criar uma instância do Carbon a partir de um timestamp com precisão de segundo
c1 := carbon.CreateFromTimestamp(1596604455)
fmt.Println(c1.ToString()) // Saída: "202-08-05 13:14:15 +080 CST"
// Para maior precisão (milissegundos), use `CreateFromTimestampMilli`
c2 := carbon.CreateFromTimestampMilli(1596604455999)
fmt.Println(c2.ToString()) // Saída: "202-08-05 13:14:15.999 +080 CST"
// Para microssegundos, use `CreateFromTimestampMicro`
c3 := carbon.CreateFromTimestampMicro(1596604455999999)
fmt.Println(c3.ToString()) // Saída: "202-08-05 13:14:15.999999 +080 CST"
// E para nanossegundos, use `CreateFromTimestampNano`
c4 := carbon.CreateFromTimestampNano(1596604455999999999)
fmt.Println(c4.ToString()) // Saída: "202-08-05 13:14:15.999999999 +080 CST"
Criação de instâncias a partir de componentes de data e hora
Se você tiver os componentes individuais de uma data, como ano, mês e dia, ou os componentes de um horário, como hora, minuto e segundo, o Carbon também pode lidar com eles.
// Criar uma instância do Carbon a partir de uma data específica
date := carbon.CreateFromDate(2022, 12, 25)
fmt.Println(date.ToDateString()) // Saída: "2022-12-25"
// Criar uma instância do Carbon a partir de um horário específico
time := carbon.CreateFromTime(23, 59, 59)
fmt.Println(time.ToTimeString()) // Saída: "23:59:59"
// Criar uma instância do Carbon a partir de uma data e horário
dateTime := carbon.CreateFromDateTime(2022, 12, 25, 23, 59, 59)
fmt.Println(dateTime.ToDateTimeString()) // Saída: "2022-12-25 23:59:59"
2.3 Análise de Strings de Tempo
Trabalhar com representações de data e hora como strings é um cenário comum. O Carbon facilita a conversão de strings em instâncias do Carbon.
Utilizando carbon.Parse
para formatos de tempo padrão:
// Analisar uma string com data e hora
c := carbon.Parse("202-08-05 13:14:15", carbon.PRC)
if c.Error != nil {
fmt.Printf("Erro: %v", c.Error)
} else {
fmt.Println(c.ToDateTimeString()) // Saída: "202-08-05 13:14:15"
}
// Analisar uma string formatada em RFC3339
rfc3339 := carbon.Parse("202-08-05T13:14:15+08:00")
fmt.Println(rfc3339.ToString()) // Saída: "202-08-05 13:14:15 +080 CST"
Formatos personalizados com ParseByFormat
e ParseByLayout
Também é possível analisar strings em um formato específico que não é diretamente manipulado pelo carbon.Parse
.
// Analisar uma string de tempo como uma instância do Carbon por formato
byFormat := carbon.ParseByFormat("202|08|05 13|14|15", "2006|01|02 15|04|05")
fmt.Println(byFormat.ToDateTimeString()) // Saída: "202-08-05 13:14:15"
// Analisar uma string de tempo como uma instância do Carbon por layout
byLayout := carbon.ParseByLayout("202|08|05", "2006|01|02")
fmt.Println(byLayout.ToDateString()) // Saída: "202-08-05"
Lidando com erros
Sempre verifique o campo Error
para garantir que a análise tenha sido bem-sucedida:
dataInvalida := carbon.Parse("Isso não é uma data", carbon.PRC)
if dataInvalida.IsInvalid() {
fmt.Println("Erro ao analisar a data:", dataInvalida.Error)
}
Lembre-se, uma verificação robusta de erro é uma parte crítica ao trabalhar com datas e horas para evitar resultados inesperados ou falhas no sistema.