Trabajo con fechas en Go (Golang): revisión de bibliotecas para análisis, formateo y manipulaciones

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): bibliotecas y herramientas



El lenguaje Go (Golang) ofrece una potente biblioteca estándar time que cubre la mayoría de las tareas relacionadas con fechas y horas. Sin embargo, para operaciones complejas como el análisis de formatos no estándar, trabajo con fechas relativas o cálculos con calendarios comerciales, la comunidad ha creado una serie de bibliotecas útiles. En este artículo, analizaremos tanto las capacidades integradas de Go como los mejores paquetes de terceros para trabajar con fechas.



1. Biblioteca integrada time



La biblioteca estándar time es la base para cualquier operación con fechas en Go. Proporciona:

  • Tipos Time, Duration, Location
  • Funciones para obtener la hora actual, crear fechas, analizar y formatear
  • Soporte para zonas horarias y relojes monotónicos


Obtener la hora actual

package main

import ( "fmt" "time")

func main() { now := time.Now() fmt.Println("Hora actual:", now) fmt.Println("Año:", now.Year()) fmt.Println("Mes:", now.Month()) fmt.Println("Día:", now.Day())}


Formateo de fechas

En Go se utiliza un formato de referencia especial: Mon Jan 2 15:04:05 MST 2006 (1,2,3,4,5,6 — dígitos en orden ascendente).

now := time.Now()fmt.Println(now.Format("2006-01-02 15:04:05"))   // 2025-03-15 14:30:00fmt.Println(now.Format("02 Jan 2006"))           // 15 Mar 2025fmt.Println(now.Format(time.RFC3339))            // 2025-03-15T14:30:00Z


Análisis de cadenas

dateStr := "2025-03-15 14:30:00"t, err := time.Parse("2006-01-02 15:04:05", dateStr)if err != nil {    panic(err)}fmt.Println(t) // 2025-03-15 14:30:00 +0000 UTC


Trabajo con zonas horarias

loc, _ := time.LoadLocation("Europe/Moscow")moscowTime := time.Now().In(loc)fmt.Println("Hora de Moscú:", moscowTime.Format("15:04:05"))


2. Biblioteca carbon



El paquete github.com/golang-module/carbon es el equivalente en Go de la popular biblioteca Carbon de PHP. Proporciona una API conveniente para trabajar con fechas, incluyendo fechas relativas, formatos legibles por humanos y llamadas encadenadas.



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(now.ToDateString()) // 2025-03-15

// Fechas relativas fmt.Println(now.AddDays(7).ToDateString()) // 2025-03-22 fmt.Println(now.SubMonths(1).ToDateString()) // 2025-02-15 fmt.Println(now.StartOfMonth().ToDateString()) // 2025-03-01 fmt.Println(now.EndOfMonth().ToDateString()) // 2025-03-31

// Formatos legibles por humanos fmt.Println(now.DiffForHumans()) // 刚刚 (justo ahora)

// Análisis con soporte de múltiples formatos t := carbon.Parse("2025-03-15 14:30:00") fmt.Println(t.ToDateTimeString()) // 2025-03-15 14:30:00

// Trabajo con zonas horarias cst := carbon.Now(carbon.NewYork) fmt.Println(cst.ToDateTimeString()) // hora en Nueva York}


3. Biblioteca now



El paquete github.com/jinzhu/now (del autor de GORM) proporciona funciones convenientes para obtener el inicio y el final de períodos de tiempo.



Instalación

go get github.com/jinzhu/now


Ejemplos

package main

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

func main() { t := time.Now() fmt.Println(now.BeginningOfMonth(t)) // 2025-03-01 00:00:00 fmt.Println(now.EndOfMonth(t)) // 2025-03-31 23:59:59 fmt.Println(now.BeginningOfYear(t))

Recommendations