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 una cadena con un formato legible. Go utiliza un enfoque único para dar formato a la hora, diferente del de otros lenguajes de programación.
En lugar de usar códigos de formato como %Y-%m-%d, Go usa una fecha de referencia como plantilla. Esta fecha de referencia es Mon Jan 2 15:04:05 MST 2006, que representa el momento exacto: el 2 de enero de 2006 a las 3:04:05 p. m., hora estándar de la montaña.
now := time.Now()
formatted := now.Format("2006-01-02")
fmt.Println(formatted) // Salida: 2023-10-26La idea clave es organizar los componentes de la fecha de referencia según el patrón que quieras. Para un formato YYYY-MM-DD, usas "2006-01-02" porque así se ve la fecha de referencia con ese patrón. Para un formato distinto, como Jan 2, 2006, usarías "Jan 2, 2006".
Este enfoque basado en la disposición hace que el formato de hora de Go sea fácil de recordar y flexible. Una vez que recuerdes la fecha de referencia, puedes crear cualquier formato simplemente organizando sus componentes según el patrón que quieras.
Desafío
FácilCrea un sistema de visualización de fecha y hora en varios formatos que formatee objetos time.Time mediante el exclusivo sistema de diseños basado en una fecha de referencia de Go. Este desafío pondrá a prueba tu capacidad para usar el método Format con distintos patrones de diseño y crear varias representaciones de fecha y hora.
Recibirás dos entradas:
- Una cadena que contiene información de fecha con el formato
"year:month:day:hour:minute"(por ejemplo,"2023:12:25:14:30") - Una cadena que contiene solicitudes de formato separadas por comas, con el formato
"format1,format2,format3"(por ejemplo,"iso,american,european,time12,time24")
Tu tarea es:
- Analizar la primera entrada separándola por los dos puntos para extraer los valores de año, mes, día, hora y minuto
- Convertir estos valores de cadena a enteros mediante el paquete
strconv - Crear un objeto
time.Timeusandotime.Datecon los valores analizados (usatime.UTCcomo ubicación, 0 para los segundos y los nanosegundos) - Mostrar el encabezado de la aplicación:
"=== DATE/TIME FORMATTER ===" - Mostrar la hora de origen:
"Source time: [complete_time_object]" - Analizar la segunda entrada separándola por comas para obtener las solicitudes de formato
- Mostrar el encabezado del formato:
"Formatted outputs:" - Para cada solicitud de formato, usar la cadena de diseño correspondiente con el método
Format:- Para
"iso": usar el diseño"2006-01-02"y mostrar"ISO format: [formatted_result]" - Para
"american": usar el diseño"01/02/2006"y mostrar"American format: [formatted_result]" - Para
"european": usar el diseño"02/01/2006"y mostrar"European format: [formatted_result]" - Para
"long": usar el diseño"January 2, 2006"y mostrar"Long format: [formatted_result]" - Para
"time12": usar el diseño"3:04 PM"y mostrar"12-hour time: [formatted_result]" - Para
"time24": usar el diseño"15:04"y mostrar"24-hour time: [formatted_result]" - Para
"full": usar el diseño"Monday, January 2, 2006 at 3:04 PM"y mostrar"Full format: [formatted_result]" - Para
"compact": usar el diseño"20060102"y mostrar"Compact format: [formatted_result]"
- Para
- Calcular y mostrar estadísticas:
"=== FORMATTING SUMMARY ===""Total formats applied: [number_of_format_requests]""Date components: [year]-[month]-[day]""Time components: [hour]:[minute]"
- 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"
- Mostrar el mensaje de finalización:
"Date formatting completed using Go's layout system"
Usa el paquete time para las operaciones con fechas y horas, el paquete strings para dividir las cadenas de entrada, el paquete strconv para convertir cadenas a enteros y el paquete fmt para la salida con formato. Recuerda que el formato de hora de Go usa como plantilla la fecha de referencia Mon Jan 2 15:04:05 MST 2006, y que debes organizar estos componentes según el patrón que quieras. Este desafío muestra cómo funciona el exclusivo sistema de formato basado en diseños de Go, al pedirte que apliques varios patrones de formato distintos al mismo objeto de hora.
Pruébalo tú mismo
package main
import (
"fmt"
"strconv"
"strings"
"time"
)
func main() {
// Lee la entrada
var dateInput string
var formatInput string
fmt.Scanln(&dateInput)
fmt.Scanln(&formatInput)
// Analiza los componentes de la fecha separándolos por dos puntos
dateComponents := strings.Split(dateInput, ":")
// Convierte los componentes de texto en números 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])
// Crea un objeto time.Time
sourceTime := time.Date(year, time.Month(month), day, hour, minute, 0, 0, time.UTC)
// Analiza las solicitudes de formato
formatRequests := strings.Split(formatInput, ",")
// TODO: Escribe tu código a continuación
// Muestra el encabezado de la aplicación
// Muestra la hora de origen
// Procesa cada solicitud de formato y muestra los resultados formateados
// Calcula y muestra las estadísticas
// Muestra la información de referencia
// Muestra el mensaje de finalización
}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
1Flujo de control avanzado
Switch con `fallthrough`Salir de bucles anidadosContinuar un bucle específicoLa sentencia `goto`Repaso: Control de bucles avanzado4Proyecto: Lista de tareas sencilla
Configuración del proyectoAñadir una tarea7Manejo de errores a fondo
Tipos de error personalizadosEnvolver errores con `%w`Desenvolver con `errors.Is`Desenvolver con `errors.As`Entendiendo `panic`Uso de `recover`Repaso - División segura10Trabajando con el tiempo
Obtener la hora actualCrear una hora específicaFormatear el tiempoParsing de cadenas de tiempoDuración del tiempoAritmética de tiempoSleeping y TickersResumen - Temporizador simple2Estructuras y Métodos
Definición de métodos en estructurasReceptores de valorReceptores de punteroElegir receptoresMétodos vs FuncionesResumen - Comportamiento de estructuras5Mapas en profundidad
Mapas de StructsPunteros como valores de MapVerificación de Maps NilComparación de MapsResumen - Contador de frecuencia de palabras3Interfaces (Conceptos básicos)
¿Qué es una interfaz?Definir una interfazImplementar una interfazUso de tipos de interfazInterfaz vacíaAserciones de tipoType SwitchResumen: Formas y comportamientosPractica por tu cuenta: Compilador de Go online