Menu
Coddy logo textTech

Crear una hora específica

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

Mientras que time.Now() te da el momento actual, a menudo necesitarás trabajar con fechas y horas específicas. Go proporciona la función time.Date para crear un objeto time.Time que representa cualquier fecha y hora que especifiques.

La función time.Date toma siete parámetros en este orden exacto: año, mes, día, hora, minuto, segundo, nanosegundo y ubicación. Aquí está la sintaxis básica:

birthday := time.Date(1990, time.March, 15, 14, 30, 0, 0, time.UTC)

Observa que Go utiliza constantes como time.March para los meses, lo que hace que tu código sea más legible que usar números. También puedes usar números enteros (1-12) si lo prefieres. El parámetro de ubicación suele utilizar time.UTC para la hora UTC o time.Local para la zona horaria local de tu sistema.

Este enfoque te brinda un control total sobre la creación de cualquier momento específico en el tiempo, ya sea un cumpleaños, una fecha límite o una fecha histórica. El objeto time.Time resultante funciona exactamente igual que el de time.Now() y se puede utilizar con todas las mismas operaciones de tiempo.

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 una aplicación de línea de tiempo de eventos históricos que utilice time.Date para representar fechas y horas específicas de la historia. Este desafío pondrá a prueba tu capacidad para crear objetos time.Time para momentos históricos precisos y mostrarlos en un formato organizado.

Recibirás dos entradas:

  • Una cadena que contiene eventos históricos en el formato "event1:year:month:day:hour:minute,event2:year:month:day:hour:minute" (por ejemplo, "Moon Landing:1969:7:20:20:17,Berlin Wall Fall:1989:11:9:21:0")
  • Una cadena que contiene opciones de visualización separadas por comas en el formato "option1,option2,option3" (por ejemplo, "chronological,details,summary")

Tu tarea es:

  1. Analizar la primera entrada dividiéndola por comas para obtener las entradas de eventos individuales
  2. Para cada entrada de evento, dividir por dos puntos para extraer el nombre del evento, año, mes, día, hora y minuto
  3. Convertir las cadenas numéricas a enteros y crear un objeto time.Time usando time.Date para cada evento (usa time.UTC para el parámetro de ubicación y 0 para segundos y nanosegundos)
  4. Mostrar el encabezado de la aplicación: "=== HISTORICAL TIMELINE APPLICATION ==="
  5. Mostrar la confirmación de carga de eventos: "Loading historical events..."
  6. Para cada evento, mostrar: "Loaded: [event_name] - [complete_time_object]"
  7. Analizar la segunda entrada dividiéndola por comas para obtener las opciones de visualización
  8. Procesar cada opción de visualización:
    • Para "chronological": Mostrar "=== CHRONOLOGICAL ORDER ===" seguido de los eventos ordenados por fecha (el más antiguo primero), mostrando "[event_name]: [year]-[month]-[day] at [hour]:[minute] UTC"
    • Para "details": Mostrar "=== DETAILED INFORMATION ===" seguido de cada evento mostrando:
      • "Event: [event_name]"
      • " Date: [year]-[month]-[day]"
      • " Time: [hour]:[minute] UTC"
      • " Weekday: [weekday_name]"
      • " Unix timestamp: [unix_seconds]"
    • Para "summary": Mostrar "=== TIMELINE SUMMARY ===" seguido de:
      • "Total events: [number_of_events]"
      • "Earliest event: [earliest_event_name] ([year])"
      • "Latest event: [latest_event_name] ([year])"
      • "Time span: [years_between_earliest_and_latest] years"
    • Para "years": Mostrar "=== EVENTS BY DECADE ===" seguido de los eventos agrupados por década, mostrando "[decade]s: [comma_separated_event_names]"
  9. Mostrar el mensaje de finalización: "Historical timeline processing completed"

Usa el paquete time para crear fechas específicas con time.Date, el paquete strings para dividir las cadenas de entrada, el paquete strconv para convertir números de cadena a enteros y el paquete fmt para la salida formateada. Recuerda que time.Date toma los parámetros en el orden exacto: año, mes, día, hora, minuto, segundo, nanosegundo, ubicación. Para ordenar cronológicamente, puedes comparar objetos time.Time usando el método Before(). Este desafío demuestra cómo crear momentos específicos en el tiempo y trabajar con datos históricos utilizando la funcionalidad de tiempo de Go.

Hoja de referencia

Usa time.Date para crear un objeto time.Time para una fecha y hora específicas:

birthday := time.Date(1990, time.March, 15, 14, 30, 0, 0, time.UTC)

La función time.Date toma siete parámetros en el orden exacto:

  • año (int)
  • mes (time.Month o int 1-12)
  • día (int)
  • hora (int)
  • minuto (int)
  • segundo (int)
  • nanosegundo (int)
  • ubicación (*time.Location)

Usa constantes de mes como time.March para mayor legibilidad, o enteros (1-12). Las ubicaciones comunes son time.UTC y time.Local.

Pruébalo tú mismo

package main

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

func main() {
	// Leer la entrada usando bufio.Scanner para manejar los espacios correctamente
	scanner := bufio.NewScanner(os.Stdin)
	
	scanner.Scan()
	eventsInput := scanner.Text()
	
	scanner.Scan()
	optionsInput := scanner.Text()
	
	// Analizar los eventos de la entrada
	eventEntries := strings.Split(eventsInput, ",")
	
	// Analizar las opciones de visualización de la entrada
	displayOptions := strings.Split(optionsInput, ",")
	
	// TODO: Escribe tu código a continuación
	// 1. Analizar cada entrada de evento para extraer nombre, año, mes, día, hora, minuto
	// 2. Recuerda verificar si el slice de partes tiene suficientes elementos antes de acceder
	// 3. Convertir los números de cadena a enteros usando strconv.Atoi()
	// 4. Crear objetos time.Time usando time.Date() para cada evento
	// 5. Mostrar el encabezado de la aplicación y los mensajes de carga
	// 6. Procesar cada opción de visualización (cronológico, detalles, resumen, años)
	// 7. Mostrar el 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