Menu
Coddy logo textTech

Formatear el tiempo

Parte de la sección Lógica y Flujo del Journey de GO de Coddy — lección 60 de 68.

Una vez que tengas un objeto time.Time, a menudo necesitarás convertirlo en un formato de cadena legible. Go utiliza un enfoque único para el formateo de tiempo que es diferente al de otros lenguajes de programación.

En lugar de usar códigos de formato como %Y-%m-%d, Go utiliza una fecha de referencia como plantilla. Esta fecha de referencia es Mon Jan 2 15:04:05 MST 2006, que representa el momento exacto: 2 de enero de 2006, a las 3:04:05 PM, hora estándar de la montaña (MST).

now := time.Now()
formatted := now.Format("2006-01-02")
fmt.Println(formatted) // Salida: 2023-10-26

La idea clave es que organizas los componentes de la fecha de referencia en el patrón que desees. Para un formato YYYY-MM-DD, usas "2006-01-02" porque así es como se ve la fecha de referencia en ese patrón. Para un formato diferente como Jan 2, 2006, usarías "Jan 2, 2006".

Este enfoque basado en diseños hace que el formateo de tiempo de Go sea tanto memorable como flexible. Una vez que recuerdas la fecha de referencia, puedes crear cualquier formato simplemente organizando sus componentes en el patrón deseado.

quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

challenge icon

Desafío

Fácil

Crea un sistema de visualización de fecha y hora multiformato que formatee objetos time.Time utilizando el sistema de diseño de fecha de referencia único de Go. Este desafío pondrá a prueba tu capacidad para usar el método Format con diferentes patrones de diseño para crear varias representaciones de fecha y hora.

Recibirás dos entradas:

  • Una cadena que contiene información de la fecha en el formato "year:month:day:hour:minute" (por ejemplo, "2023:12:25:14:30")
  • Una cadena que contiene solicitudes de formato separadas por comas en el formato "format1,format2,format3" (por ejemplo, "iso,american,european,time12,time24")

Tu tarea es:

  1. Analizar la primera entrada dividiéndola por dos puntos para extraer los valores de año, mes, día, hora y minuto
  2. Convertir estos valores de cadena a enteros usando el paquete strconv
  3. Crear un objeto time.Time usando time.Date con los valores analizados (usa time.UTC para la ubicación, 0 para segundos y nanosegundos)
  4. Mostrar el encabezado de la aplicación: "=== DATE/TIME FORMATTER ==="
  5. Mostrar la hora de origen: "Source time: [complete_time_object]"
  6. Analizar la segunda entrada dividiéndola por comas para obtener las solicitudes de formato
  7. Mostrar el encabezado de formateo: "Formatted outputs:"
  8. Para cada solicitud de formato, utiliza la cadena de diseño adecuada con el método Format:
    • Para "iso": Usa el diseño "2006-01-02" y muestra "ISO format: [formatted_result]"
    • Para "american": Usa el diseño "01/02/2006" y muestra "American format: [formatted_result]"
    • Para "european": Usa el diseño "02/01/2006" y muestra "European format: [formatted_result]"
    • Para "long": Usa el diseño "January 2, 2006" y muestra "Long format: [formatted_result]"
    • Para "time12": Usa el diseño "3:04 PM" y muestra "12-hour time: [formatted_result]"
    • Para "time24": Usa el diseño "15:04" y muestra "24-hour time: [formatted_result]"
    • Para "full": Usa el diseño "Monday, January 2, 2006 at 3:04 PM" y muestra "Full format: [formatted_result]"
    • Para "compact": Usa el diseño "20060102" y muestra "Compact format: [formatted_result]"
  9. Calcular y mostrar estadísticas:
    • "=== FORMATTING SUMMARY ==="
    • "Total formats applied: [number_of_format_requests]"
    • "Date components: [year]-[month]-[day]"
    • "Time components: [hour]:[minute]"
  10. Mostrar información de referencia:
    • "=== REFERENCE DATE INFO ==="
    • "Go uses reference date: Mon Jan 2 15:04:05 MST 2006"
    • "This represents: January 2nd, 2006 at 3:04:05 PM"
    • "Layout patterns arrange these components as needed"
  11. Mostrar el mensaje de finalización: "Date formatting completed using Go's layout system"

Utiliza el paquete time para las operaciones de tiempo, el paquete strings para dividir las cadenas de entrada, el paquete strconv para convertir cadenas a enteros y el paquete fmt para la salida formateada. Recuerda que el formateo de tiempo de Go utiliza la fecha de referencia Mon Jan 2 15:04:05 MST 2006 como plantilla, y tú organizas estos componentes en el patrón que desees. Este desafío demuestra cómo funciona el sistema de formateo único basado en diseños de Go al hacerte aplicar múltiples patrones de formato diferentes al mismo objeto de tiempo.

Hoja de referencia

Go utiliza un enfoque de fecha de referencia único para el formateo de tiempo: Mon Jan 2 15:04:05 MST 2006

Para formatear un objeto time.Time, utiliza el método Format con patrones de diseño basados en la fecha de referencia:

now := time.Now()
formatted := now.Format("2006-01-02")
fmt.Println(formatted) // Salida: 2023-10-26

Patrones de diseño comunes:

  • "2006-01-02" - Formato ISO (AAAA-MM-DD)
  • "01/02/2006" - Formato americano (MM/DD/AAAA)
  • "02/01/2006" - Formato europeo (DD/MM/AAAA)
  • "January 2, 2006" - Formato largo
  • "3:04 PM" - Hora en formato de 12 horas
  • "15:04" - Hora en formato de 24 horas
  • "Monday, January 2, 2006 at 3:04 PM" - Formato completo
  • "20060102" - Formato compacto

La clave es organizar los componentes de la fecha de referencia en el patrón deseado.

Pruébalo tú mismo

package main

import (
	"fmt"
	"strconv"
	"strings"
	"time"
)

func main() {
	// Leer entrada
	var dateInput string
	var formatInput string
	fmt.Scanln(&dateInput)
	fmt.Scanln(&formatInput)
	
	// Analizar los componentes de la fecha dividiendo por dos puntos
	dateComponents := strings.Split(dateInput, ":")
	
	// Convertir componentes de cadena a enteros
	year, _ := strconv.Atoi(dateComponents[0])
	month, _ := strconv.Atoi(dateComponents[1])
	day, _ := strconv.Atoi(dateComponents[2])
	hour, _ := strconv.Atoi(dateComponents[3])
	minute, _ := strconv.Atoi(dateComponents[4])
	
	// Crear objeto time.Time
	sourceTime := time.Date(year, time.Month(month), day, hour, minute, 0, 0, time.UTC)
	
	// Analizar solicitudes de formato
	formatRequests := strings.Split(formatInput, ",")
	
	// TODO: Escribe tu código a continuación
	// Mostrar el encabezado de la aplicación
	// Mostrar la hora de origen
	// Procesar cada solicitud de formato y mostrar las salidas formateadas
	// Calcular y mostrar estadísticas
	// Mostrar información de referencia
	// Mostrar mensaje de finalización
	
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Lógica y Flujo