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 proporciona 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 ocho parámetros en este orden exacto: año, mes, day, hora, minuto, segundo, nanosegundo y ubicación. Esta es 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 utilizar enteros (1-12) si lo prefieres. El parámetro de ubicación normalmente utiliza time.UTC para la hora UTC o time.Local para la zona horaria local de tu sistema.

Este enfoque te brinda control total para crear 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 puede usarse con las mismas operaciones de tiempo.

challenge icon

Desafío

Fácil

Crea una aplicación de línea temporal de eventos históricos que use 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 que representen 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 cada evento
  2. Para cada entrada de evento, dividirla por dos puntos para extraer el nombre del evento, el año, el mes, el día, la hora y el minuto
  3. Convertir las cadenas numéricas en enteros y crear un objeto time.Time usando time.Date para cada evento (usa time.UTC como parámetro de ubicación y 0 para los segundos y nanosegundos)
  4. Mostrar el encabezado de la aplicación: "=== HISTORICAL TIMELINE APPLICATION ==="
  5. Mostrar la confirmación de carga de los 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 (del más antiguo al más reciente), 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 cadenas numéricas en enteros y el paquete fmt para la salida con formato. Recuerda que time.Date recibe los parámetros en el orden exacto: año, mes, día, hora, minuto, segundo, nanosegundo y 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 usando la funcionalidad temporal de Go.

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. Analiza cada entrada de evento para extraer name, year, month, day, hour, minute
	// 2. Recuerda comprobar si el slice parts tiene suficientes elementos antes de acceder
	// 3. Convierte los números en string a enteros usando strconv.Atoi()
	// 4. Crea objetos time.Time usando time.Date() para cada evento
	// 5. Muestra el encabezado de la aplicación y los mensajes de carga
	// 6. Process each display option (chronological, details, summary, years)
	// 7. Muestra 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

Practica por tu cuenta: Compilador de Go online