Trabajo con fechas en Go (Golang): librerías time, carbon y now

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Trabajo con fechas en Go (Golang): reseña de librerías



Trabajar con fechas y horas es una de las tareas clave en cualquier lenguaje de programación. En Go (Golang), la librería estándar proporciona un potente paquete time, pero a veces, por comodidad, los desarrolladores recurren a librerías de terceros. En este artículo, analizaremos las principales capacidades del paquete estándar y revisaremos dos librerías populares: carbon y now.



1. Paquete estándar time



El paquete time es la base para trabajar con fechas en Go. Incluye los tipos Time, Duration, funciones para análisis, formato, trabajo con temporizadores y zonas horarias.



Creación y formato de fecha



package main

import ( "fmt" "time")

func main() { // Hora actual now := time.Now() fmt.Println("Ahora:", now)

// Creación de una fecha específica date := time.Date(2025, time.March, 15, 14, 30, 0, 0, time.UTC) fmt.Println("Fecha específica:", date)

// Formato (obligatoriamente "2006-01-02 15:04:05" como referencia) fmt.Println("Formato:", date.Format("02.01.2006 15:04:05"))}


Análisis de cadena a fecha



func main() {    // Análisis indicando el formato    str := "2025-03-15 14:30:00"    parsed, err := time.Parse("2006-01-02 15:04:05", str)    if err != nil {        panic(err)    }    fmt.Println("Analizado:", parsed)}


Trabajo con zonas horarias



func main() {    loc, _ := time.LoadLocation("Europe/Moscow")    moscowTime := time.Now().In(loc)    fmt.Println("Hora de Moscú:", moscowTime)}


Diferencia entre fechas



func main() {    start := time.Date(2025, 1, 1, 0, 0, 0, 0, time.UTC)    end := time.Date(2025, 12, 31, 23, 59, 59, 0, time.UTC)    duration := end.Sub(start)    fmt.Printf("Diferencia: %v (horas: %v)", duration, duration.Hours())}


2. Librería carbon



La librería carbon (github.com/golang-module/carbon) es un puerto de la popular librería PHP Carbon para Go. Proporciona una interfaz fluida conveniente para trabajar con fechas.



Instalación



go get github.com/golang-module/carbon/v2


Ejemplos de uso



package main

import ( "fmt" "github.com/golang-module/carbon/v2")

func main() { // Fecha actual now := carbon.Now() fmt.Println("Ahora:", now.ToString())

// Creación de fecha date := carbon.Parse("2025-03-15 14:30:00") fmt.Println("Analizado:", date.ToDateString())

// Adición de días future := carbon.Now().AddDays(10) fmt.Println("En 10 días:", future.ToDateString())

// Diferencia en días diff := carbon.Now().DiffInDays(carbon.Parse("2025-12-31")) fmt.Printf("Hasta Año Nuevo: %d días", diff)

// Formato fmt.Println("Formato personalizado:", carbon.Now().Format("d/m/Y H:i:s"))}


Métodos útiles



  • StartOfDay() / EndOfDay() — inicio/fin del día
  • IsWeekend() / IsWeekday() — verificación del día de la semana
  • Age() — edad desde la fecha de nacimiento
  • DiffForHumans() — diferencia legible para humanos (ej., "hace 3 días")


3. Librería now



La librería now (github.com/jinzhu/now) del creador de GORM es una utilidad ligera para obtener el inicio y el final de períodos de tiempo.



Instalación



go get github.com/jinzhu/now


Ejemplos de uso



package main

import ( "fmt" "time" "github.com/jinzhu/now")

func main() { // Inicio del día beginningOfDay := now.BeginningOfDay() fmt.Println("

Recommendations