1: Introducción a Carbon
1.1 Introducción
Un paquete simple, semántico y amigable para desarrolladores en Golang para manejar fechas y horas.
Beneficios de usar Carbon para el manejo de fechas y horas:
- Amigable para Desarrolladores: Carbon ofrece una interfaz fluida y expresiva para tratar con fechas y horas que es intuitiva para los desarrolladores.
- Soporte de Internacionalización: Admite internacionalización, lo que te permite localizar tus representaciones de fecha.
- Inmutabilidad: Las instancias de Carbon son inmutables, lo que significa que se pueden pasar de manera segura sin modificaciones inesperadas.
- Manejo de Zonas Horarias: Carbon simplifica la complejidad de gestionar fechas y horas en diferentes zonas horarias.
- API Extensa: Proporciona un conjunto completo de funciones para crear, analizar y formatear fechas y horas.
1.2 Guía de Instalación
Instalación para la versión de Go >= 1.16
Para instalar el paquete Carbon para Go versión 1.16 o superior, usa el siguiente comando:
go get -u github.com/golang-module/carbon/v2
Luego, importa el paquete en tu archivo de Go:
import "github.com/golang-module/carbon/v2"
Instalación para versiones de Go < 1.16
Para versiones anteriores de Go, aún puedes instalar Carbon utilizando:
go get -u github.com/golang-module/carbon
E impórtalo de manera similar:
import "github.com/golang-module/carbon"
Ten en cuenta que la versión 1 ya no se actualiza activamente, pero se mantendrá para correcciones de errores.
1.3 Configuración de tu Primer Proyecto Carbon
Configuración básica de Carbon: Una vez instalado Carbon, puedes empezar a usarlo simplemente creando una nueva instancia de Carbon. Puedes personalizar Carbon configurando el diseño global predeterminado, la zona horaria y el idioma para que se ajuste a las necesidades de tu proyecto.
Configuración del diseño global predeterminado, la zona horaria y el idioma:
carbon.SetDefault(carbon.Default{
Layout: carbon.RFC3339Layout,
Timezone: carbon.PRC,
Locale: "en",
})
Si no se establece explícitamente, Carbon tiene la configuración predeterminada para estos — Layout: "2006-01-02 15:04:05"
, Timezone: Local
, Locale: "en"
.
2: Operaciones Básicas de Carbon
2.1 Trabajando con la Hora Actual
Obtención de la Fecha y Hora Actual
Recuperar la fecha y hora actuales es una operación fundamental en muchas aplicaciones. Con Carbon, puedes adquirir la instancia de fecha y hora actual llamando al método carbon.Now()
. Veamos cómo obtener la fecha y hora actuales:
// Obtiene la fecha y hora actuales como una instancia de Carbon.
now := carbon.Now()
fmt.Println("Fecha y hora actuales:", now)
Mostrar Hoy, Ayer y Mañana
Carbon proporciona una manera elegante de trabajar con fechas en relación al día actual. Para obtener la representación de la fecha y hora actual, de ayer y de mañana, puedes usar los métodos carbon.Now()
, carbon.Yesterday()
y carbon.Tomorrow()
respectivamente:
// Fecha y hora de hoy
hoy := carbon.Now()
fmt.Println("Hoy:", hoy.ToDateTimeString())
// Fecha y hora de ayer
ayer := carbon.Yesterday()
fmt.Println("Ayer:", ayer.ToDateTimeString())
// Fecha y hora de mañana
mañana := carbon.Tomorrow()
fmt.Println("Mañana:", mañana.ToDateTimeString())
Estos métodos proporcionan una forma concisa de interactuar con estas referencias de fecha comúnmente utilizadas sin cálculos manuales.
Formateo y Representación de la Hora Actual
Carbon facilita diferentes formas de formatear y mostrar la fecha y hora. Ya sea que necesites un formato estándar como ISO8601, un formato personalizado o una versión localizada, Carbon tiene métodos para satisfacer estos requisitos.
Así es como puedes formatear la fecha y hora actuales de diversas maneras:
// Representación estándar de la fecha y hora
fmt.Println("RFC3339:", now.ToRFC3339String())
fmt.Println("ISO8601:", now.ToIso8601String())
// Formato de fecha y hora personalizado
fmt.Println("Personalizado:", now.Format("Monday, 02-Jan-06 15:04:05 MST"))
// Usando diseños predefinidos
fmt.Println("Formato ANSIC:", now.ToAnsicString())
fmt.Println("Formato UnixDate:", now.ToUnixDateString())
fmt.Println("Formato RubyDate:", now.ToRubyDateString())
fmt.Println("Formato Kitchen:", now.ToKitchenString())
// Para patrones personalizados, utiliza el método Format
fmt.Println("Patrón personalizado:", now.Format("2006-01-02 3:04 PM"))
2.2 Creación de Instancias de Carbon
Creación de instancias a partir de marcas de tiempo
En Go, es frecuente trabajar con marcas de tiempo, y Carbon proporciona métodos intuitivos para manejarlas. Una marca de tiempo es una secuencia de caracteres o información codificada que identifica cuándo ocurrió un cierto evento, generalmente dando la fecha y hora del día, a veces precisa hasta una pequeña fracción de segundo.
Para crear una instancia de Carbon a partir de una marca de tiempo Unix, que representa el número de segundos que han transcurrido desde la época de Unix (medianoche del 1 de enero de 1970, UTC), puedes utilizar varios niveles de precisión:
// Crear una instancia de Carbon a partir de una marca de tiempo dada con precisión de segundo
c1 := carbon.CreateFromTimestamp(1596604455)
fmt.Println(c1.ToString()) // Salida: "202-08-05 13:14:15 +080 CST"
// Para una mayor precisión (milisegundos), utiliza `CreateFromTimestampMilli`
c2 := carbon.CreateFromTimestampMilli(1596604455999)
fmt.Println(c2.ToString()) // Salida: "202-08-05 13:14:15.999 +080 CST"
// Para microsegundos, utiliza `CreateFromTimestampMicro`
c3 := carbon.CreateFromTimestampMicro(1596604455999999)
fmt.Println(c3.ToString()) // Salida: "202-08-05 13:14:15.999999 +080 CST"
// Y para nanosegundos, utiliza `CreateFromTimestampNano`
c4 := carbon.CreateFromTimestampNano(1596604455999999999)
fmt.Println(c4.ToString()) // Salida: "202-08-05 13:14:15.999999999 +080 CST"
Creación de instancias a partir de componentes de fecha y hora
Si tienes los componentes individuales de una fecha, como el año, el mes y el día, o los componentes de una hora, como la hora, el minuto y el segundo, Carbon también puede manejarlos.
// Crear una instancia de Carbon a partir de una fecha dada solamente
fecha := carbon.CreateFromDate(2022, 12, 25)
fmt.Println(fecha.ToDateString()) // Salida: "2022-12-25"
// Crear una instancia de Carbon a partir de una hora dada solamente
hora := carbon.CreateFromTime(23, 59, 59)
fmt.Println(hora.ToTimeString()) // Salida: "23:59:59"
// Crear una instancia de Carbon a partir de una fecha y hora
fechaHora := carbon.CreateFromDateTime(2022, 12, 25, 23, 59, 59)
fmt.Println(fechaHora.ToDateTimeString()) // Salida: "2022-12-25 23:59:59"
2.3 Análisis de cadenas de tiempo
Manejar representaciones de fecha y hora como cadenas es un escenario común. Carbon hace conveniente analizar cadenas en instancias de Carbon.
Uso de carbon.Parse
para formatos de tiempo estándar:
// Analizar una cadena con fecha y hora
c := carbon.Parse("202-08-05 13:14:15", carbon.PRC)
if c.Error != nil {
fmt.Printf("Error: %v", c.Error)
} else {
fmt.Println(c.ToDateTimeString()) // Salida: "202-08-05 13:14:15"
}
// Analizar una cadena con formato RFC3339
rfc3339 := carbon.Parse("202-08-05T13:14:15+08:00")
fmt.Println(rfc3339.ToString()) // Salida: "202-08-05 13:14:15 +080 CST"
Formatos personalizados con ParseByFormat
y ParseByLayout
También puedes analizar cadenas que tienen un formato específico no manejado directamente por carbon.Parse
.
// Analizar una cadena de tiempo como instancia de Carbon por formato
porFormato := carbon.ParseByFormat("202|08|05 13|14|15", "2006|01|02 15|04|05")
fmt.Println(porFormato.ToDateTimeString()) // Salida: "202-08-05 13:14:15"
// Analizar una cadena de tiempo como instancia de Carbon por diseño
porDiseño := carbon.ParseByLayout("202|08|05", "2006|01|02")
fmt.Println(porDiseño.ToDateString()) // Salida: "202-08-05"
Manejo de errores
Siempre verifica el campo Error
para asegurarte de que el análisis se realizó con éxito:
fechaInvalida := carbon.Parse("Esto no es una fecha", carbon.PRC)
if fechaInvalida.IsInvalid() {
fmt.Println("Error al analizar la fecha:", fechaInvalida.Error)
}
Recuerda que una verificación de errores robusta es una parte crítica del trabajo con fechas y horas para prevenir resultados inesperados o fallas del sistema.