Trabajo con fechas y horas en Go: guía completa

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 y horas en Go: desde lo básico hasta técnicas avanzadas

El lenguaje de programación Go (Golang) ofrece un paquete time potente e intuitivo para trabajar con fechas y horas. A diferencia de muchos otros lenguajes, Go utiliza un enfoque único para el formateo, basado en una fecha de referencia (Mon Jan 2 15:04:05 MST 2006). En este artículo, analizaremos en detalle todos los aspectos clave: desde la creación de objetos de tiempo hasta el trabajo con temporizadores y zonas horarias. El material será útil tanto para principiantes como para desarrolladores experimentados que migran a Go.



1. Fundamentos: creación, obtención y visualización de la hora

El tipo central para trabajar es time.Time. El momento actual se obtiene con time.Now(). Para crear una fecha específica se utiliza time.Date().



package main

import ( "fmt" "time")

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

// Creación de una fecha específica (año, mes, día, hora, min, seg, nanoseg, Location) specific := time.Date(2025, time.January, 15, 10, 30, 0, 0, time.UTC) fmt.Println("Fecha específica:", specific)

// Extracción de componentes fmt.Println("Año:", now.Year()) fmt.Println("Mes:", now.Month()) fmt.Println("Día:", now.Day()) fmt.Println("Hora:", now.Hour()) fmt.Println("Minuto:", now.Minute()) fmt.Println("Segundo:", now.Second()) fmt.Println("Día de la semana:", now.Weekday())}


La salida del programa mostrará la hora actual y sus componentes. Tenga en cuenta: time.Now() devuelve la hora en la zona horaria local del sistema.



2. Formateo y análisis: característica distintiva de Go

En Go, el formateo de fechas no se realiza mediante caracteres como YYYY-MM-DD, sino a través de una fecha de referencia: Mon Jan 2 15:04:05 MST 2006 (o 01/02 03:04:05PM '06 -0700). Recuerde esta cadena mágica: se ve como 1 2 3 4 5 6 -7.



  • 1 — mes (01, Jan, January)
  • 2 — día (02, 2)
  • 3 — hora en formato de 12 horas (03, 3)
  • 4 — minuto (04, 4)
  • 5 — segundo (05, 5)
  • 6 — año (06, 2006)
  • -7 — zona horaria (MST, -0700, -07:00)


Formateo (Time → String)

now := time.Now()

// Formatos estándarfmt.Println(now.Format("2006-01-02 15:04:05")) // 2025-01-15 10:30:45fmt.Println(now.Format("02.01.2006")) // 15.01.2025fmt.Println(now.Format(time.RFC3339)) // 2025-01-15T10:30:45Zfmt.Println(now.Format("Mon, 02 Jan 2006 15:04:05 MST")) // Wed, 15 Jan 2025 10:30:45 UTC


Análisis (String → Time)

// Análisis de cadena a time.TimedateStr := "2025-01-15 10:30:45"layout := "2006-01-02 15:04:05"parsedTime, err := time.Parse(layout, dateStr)if err != nil {    panic(err)}fmt.Println("Analizado:", parsedTime)

// Análisis con zona horariadateWithZone := "2025-01-15T10:30:45+03:00"parsedWithZone, _ := time.Parse(time.RFC3339, dateWithZone)fmt.Println("Con zona:", parsedWithZone)


Si necesita analizar una fecha en una zona horaria específica, use time.ParseInLocation().



3. Operaciones con fechas: Duration, Add, Sub y comparación

El tipo time.Duration representa un intervalo de tiempo. Go proporciona constantes: Nanosecond, Microsecond, Millisecond, Second, Minute, Hour.



now := time.Now()

// Adición de tiempofuture := now.Add(72 * time.Hour) // +3 díasfmt.Println("Dentro de 72 horas:", future)

// Sustracción de tiempopast := now.Add(-30 * time.Minute) // 30 minutos atrásfmt.P

Blogs

Book Recommendations