Duración del tiempo
Parte de la sección Lógica y Flujo del Journey de GO de Coddy — lección 62 de 68.
Al trabajar con tiempo en Go, a menudo necesitarás representar periodos de tiempo, como "5 minutos" o "2 horas". Go proporciona el tipo time.Duration específicamente para este propósito.
Un time.Duration representa un lapso de tiempo entre dos instantes. Go incluye varias constantes predefinidas que hacen que la creación de duraciones sea sencilla y legible:
tenMinutes := 10 * time.Minute
twoHours := 2 * time.Hour
thirtySeconds := 30 * time.SecondLas constantes de duración más utilizadas son time.Nanosecond, time.Microsecond, time.Millisecond, time.Second, time.Minute y time.Hour. Puedes multiplicar estas constantes por enteros para crear la duración exacta que necesites.
Los valores de duración son esenciales para la aritmética de tiempo, las operaciones de programación y el control de la temporización en sus programas. Funcionan perfectamente con otras funciones de tiempo y proporcionan una forma clara y legible de expresar intervalos de tiempo en su código.
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Desafío
FácilCrea un temporizador de sesión de entrenamiento que utilice time.Duration para realizar un seguimiento de los diferentes intervalos de ejercicio y periodos de descanso. Este desafío pondrá a prueba tu capacidad para crear valores de duración utilizando las constantes predefinidas de Go y realizar cálculos con ellas.
Recibirás dos entradas:
- Una cadena que contiene definiciones de ejercicios en el formato
"exercise1:duration_value:duration_unit,exercise2:duration_value:duration_unit"(por ejemplo,"Push-ups:30:Second,Plank:2:Minute,Squats:45:Second") - Una cadena que contiene información sobre el periodo de descanso en el formato
"rest_duration_value:rest_duration_unit"(por ejemplo,"15:Second")
Tu tarea es:
- Analizar la primera entrada dividiéndola por comas para obtener las entradas de ejercicios individuales
- Para cada entrada de ejercicio, dividir por dos puntos para extraer el nombre del ejercicio, el valor de la duración (como cadena) y la unidad de duración
- Analizar la segunda entrada dividiéndola por dos puntos para obtener el valor y la unidad de la duración del descanso
- Convertir los valores de duración de cadenas a enteros y crear objetos
time.Durationutilizando las constantes apropiadas:- Para
"Second": multiplicar portime.Second - Para
"Minute": multiplicar portime.Minute - Para
"Hour": multiplicar portime.Hour
- Para
- Mostrar el encabezado de la aplicación:
"=== WORKOUT SESSION TIMER ===" - Mostrar la configuración de la sesión:
"Setting up workout session..." - Para cada ejercicio, mostrar:
"Exercise: [exercise_name] - Duration: [duration_object]" - Mostrar el periodo de descanso:
"Rest period between exercises: [rest_duration_object]" - Calcular y mostrar el desglose de la sesión:
"=== SESSION BREAKDOWN ==="- Para cada ejercicio:
"[exercise_name]: [duration_in_seconds] seconds" "Rest periods: [rest_duration_in_seconds] seconds each"
- Calcular el tiempo total de la sesión (suma de todas las duraciones de los ejercicios más los periodos de descanso entre ejercicios):
"=== TIMING CALCULATIONS ===""Total exercise time: [total_exercise_duration_object]""Total rest time: [total_rest_duration_object]"(periodos de descanso entre ejercicios, por lo tanto, uno menos que el número de ejercicios)"Complete session duration: [total_session_duration_object]"
- Mostrar las estadísticas de la sesión:
"=== SESSION STATISTICS ===""Number of exercises: [number_of_exercises]""Longest exercise: [longest_exercise_name] ([longest_duration_object])""Shortest exercise: [shortest_exercise_name] ([shortest_duration_object])""Average exercise duration: [average_duration_in_seconds] seconds"
- Mostrar las conversiones de tiempo:
"=== TIME CONVERSIONS ===""Session duration in minutes: [total_minutes]"(convertir la duración total de la sesión a minutos)"Session duration in hours: [total_hours]"(convertir la duración total de la sesión a horas, mostrar como decimal)
- Mostrar el mensaje de finalización:
"Workout session timer configured successfully"
Utiliza el paquete time para trabajar con duraciones, 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 los valores de time.Duration se pueden sumar y convertir a diferentes unidades utilizando métodos como Seconds(), Minutes() y Hours(). Este desafío demuestra cómo crear y manipular valores de duración para aplicaciones de cronometraje.
Hoja de referencia
Go proporciona el tipo time.Duration para representar periodos de tiempo entre dos instantes.
Crea duraciones utilizando constantes predefinidas multiplicadas por enteros:
tenMinutes := 10 * time.Minute
twoHours := 2 * time.Hour
thirtySeconds := 30 * time.SecondLas constantes de duración comunes incluyen:
time.Nanosecondtime.Microsecondtime.Millisecondtime.Secondtime.Minutetime.Hour
Los valores de duración se pueden sumar y convertir a diferentes unidades utilizando métodos como Seconds(), Minutes() y Hours().
Pruébalo tú mismo
package main
import (
"fmt"
"strconv"
"strings"
"time"
)
func main() {
// Leer entrada
var exerciseInput string
var restInput string
fmt.Scanln(&exerciseInput)
fmt.Scanln(&restInput)
// Analizar ejercicios de la entrada
exerciseEntries := strings.Split(exerciseInput, ",")
// Analizar periodo de descanso de la entrada
restParts := strings.Split(restInput, ":")
// TODO: Escribe tu código a continuación
// 1. Analizar cada entrada de ejercicio para extraer el nombre, el valor de la duración y la unidad
// 2. Convertir los valores de duración a enteros y crear objetos time.Duration
// 3. Analizar la duración del descanso y crear el objeto time.Duration
// 4. Mostrar la información de la sesión de entrenamiento y los cálculos
// 5. Calcular las estadísticas de la sesión y las conversiones de tiempo
// Recuerda imprimir toda la información requerida como se especifica en el desafío
}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 comportamientos