Menu
Coddy logo textTech

Duração de Tempo

Parte da seção Lógica & Fluxo do Journey de GO da Coddy — lição 62 de 68.

Ao trabalhar com tempo em Go, você frequentemente precisará representar períodos de tempo - como "5 minutos" ou "2 horas". Go fornece o tipo time.Duration especificamente para este propósito.

Um time.Duration representa um intervalo de tempo entre dois instantes. Go inclui várias constantes predefinidas que tornam a criação de durações simples e legível:

tenMinutes := 10 * time.Minute
twoHours := 2 * time.Hour
thirtySeconds := 30 * time.Second

As constantes de duração mais comumente usadas são time.Nanosecond, time.Microsecond, time.Millisecond, time.Second, time.Minute e time.Hour. Você pode multiplicar essas constantes por números inteiros para criar a duração exata de que precisa.

Valores de duração são essenciais para aritmética de tempo, operações de agendamento e controle de temporização em seus programas. Eles funcionam perfeitamente com outras funções de tempo e fornecem uma maneira clara e legível de expressar intervalos de tempo em seu código.

quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

challenge icon

Desafio

Fácil

Crie um temporizador de sessão de treino que use time.Duration para rastrear diferentes intervalos de exercícios e períodos de descanso. Este desafio testará sua habilidade de criar valores de duração usando as constantes predefinidas do Go e realizar cálculos com elas.

Você receberá duas entradas:

  • Uma string contendo definições de exercícios no formato "exercise1:duration_value:duration_unit,exercise2:duration_value:duration_unit" (ex: "Push-ups:30:Second,Plank:2:Minute,Squats:45:Second")
  • Uma string contendo informações do período de descanso no formato "rest_duration_value:rest_duration_unit" (ex: "15:Second")

Sua tarefa é:

  1. Analisar a primeira entrada dividindo-a por vírgulas para obter as entradas individuais de exercícios
  2. Para cada entrada de exercício, dividir por dois pontos para extrair o nome do exercício, o valor da duração (como string) e a unidade de duração
  3. Analisar a segunda entrada dividindo-a por dois pontos para obter o valor e a unidade da duração do descanso
  4. Converter os valores de duração de strings para inteiros e criar objetos time.Duration usando as constantes apropriadas:
    • Para "Second": multiplique por time.Second
    • Para "Minute": multiplique por time.Minute
    • Para "Hour": multiplique por time.Hour
  5. Exibir o cabeçalho da aplicação: "=== WORKOUT SESSION TIMER ==="
  6. Exibir a configuração da sessão: "Setting up workout session..."
  7. Para cada exercício, exibir: "Exercise: [exercise_name] - Duration: [duration_object]"
  8. Exibir o período de descanso: "Rest period between exercises: [rest_duration_object]"
  9. Calcular e exibir o detalhamento da sessão:
    • "=== SESSION BREAKDOWN ==="
    • Para cada exercício: "[exercise_name]: [duration_in_seconds] seconds"
    • "Rest periods: [rest_duration_in_seconds] seconds each"
  10. Calcular o tempo total da sessão (soma de todas as durações dos exercícios mais os períodos de descanso entre os exercícios):
    • "=== TIMING CALCULATIONS ==="
    • "Total exercise time: [total_exercise_duration_object]"
    • "Total rest time: [total_rest_duration_object]" (períodos de descanso entre os exercícios, portanto, um a menos que o número de exercícios)
    • "Complete session duration: [total_session_duration_object]"
  11. Exibir estatísticas da sessão:
    • "=== 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"
  12. Exibir conversões de tempo:
    • "=== TIME CONVERSIONS ==="
    • "Session duration in minutes: [total_minutes]" (converter a duração total da sessão para minutos)
    • "Session duration in hours: [total_hours]" (converter a duração total da sessão para horas, exibindo como decimal)
  13. Exibir a mensagem de conclusão: "Workout session timer configured successfully"

Use o pacote time para trabalhar com durações, o pacote strings para dividir as strings de entrada, o pacote strconv para converter números em string para inteiros e o pacote fmt para saída formatada. Lembre-se que os valores de time.Duration podem ser somados e convertidos para diferentes unidades usando métodos como Seconds(), Minutes() e Hours(). Este desafio demonstra como criar e manipular valores de duração para aplicações de cronometragem.

Folha de consulta

Go fornece o tipo time.Duration para representar períodos de tempo entre dois instantes.

Crie durações usando constantes predefinidas multiplicadas por inteiros:

tenMinutes := 10 * time.Minute
twoHours := 2 * time.Hour
thirtySeconds := 30 * time.Second

Constantes de duração comuns incluem:

  • time.Nanosecond
  • time.Microsecond
  • time.Millisecond
  • time.Second
  • time.Minute
  • time.Hour

Valores de duração podem ser somados e convertidos para diferentes unidades usando métodos como Seconds(), Minutes() e Hours().

Experimente você mesmo

package main

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

func main() {
	// Ler entrada
	var exerciseInput string
	var restInput string
	fmt.Scanln(&exerciseInput)
	fmt.Scanln(&restInput)
	
	// Analisar exercícios da entrada
	exerciseEntries := strings.Split(exerciseInput, ",")
	
	// Analisar período de descanso da entrada
	restParts := strings.Split(restInput, ":")
	
	// TODO: Escreva seu código abaixo
	// 1. Analisar cada entrada de exercício para extrair nome, valor da duração e unidade
	// 2. Converter valores de duração para inteiros e criar objetos time.Duration
	// 3. Analisar a duração do descanso e criar o objeto time.Duration
	// 4. Exibir informações da sessão de treino e cálculos
	// 5. Calcular estatísticas da sessão e conversões de tempo
	
	// Lembre-se de exibir todas as informações exigidas conforme especificado no desafio
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Lógica & Fluxo