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.SecondAs 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.
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Desafio
FácilCrie 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 é:
- Analisar a primeira entrada dividindo-a por vírgulas para obter as entradas individuais de exercícios
- 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
- Analisar a segunda entrada dividindo-a por dois pontos para obter o valor e a unidade da duração do descanso
- Converter os valores de duração de strings para inteiros e criar objetos
time.Durationusando as constantes apropriadas:- Para
"Second": multiplique portime.Second - Para
"Minute": multiplique portime.Minute - Para
"Hour": multiplique portime.Hour
- Para
- Exibir o cabeçalho da aplicação:
"=== WORKOUT SESSION TIMER ===" - Exibir a configuração da sessão:
"Setting up workout session..." - Para cada exercício, exibir:
"Exercise: [exercise_name] - Duration: [duration_object]" - Exibir o período de descanso:
"Rest period between exercises: [rest_duration_object]" - 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"
- 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]"
- 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"
- 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)
- 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.SecondConstantes de duração comuns incluem:
time.Nanosecondtime.Microsecondtime.Millisecondtime.Secondtime.Minutetime.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
}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
1Fluxo de Controle Avançado
Switch com `fallthrough`Interrompendo Loops AninhadosContinuando um Loop EspecíficoA Instrução `goto`Recapitulação - Controle de Loop Avançado4Projeto: Lista de Tarefas Simples
Configuração do ProjetoAdicionando uma Tarefa2Structs e Métodos
Definindo Métodos em StructsRecebedores de ValorRecebedores de PonteiroEscolhendo RecebedoresMétodos vs FunçõesRecapitulação - Comportamento de Structs5Mapas em Profundidade
Mapas de StructsPonteiros como Valores de MapVerificando Mapas NilComparando MapasRecapitulação - Contador de Frequência de Palavras3Interfaces (O Básico)
O que é uma Interface?Definindo uma InterfaceImplementando uma InterfaceUsando Tipos de InterfaceInterface VaziaAsserções de TipoType SwitchRecapitulação - Formas e Comportamentos