Menu
Coddy logo textTech

Длительность времени

Часть раздела Логика и управление потоком путешествия по GO на Coddy — урок 62 из 68.

При работе со временем в Go вам часто понадобится представлять промежутки времени — например, «5 минут» или «2 часа». Go предоставляет тип time.Duration специально для этой цели.

time.Duration представляет собой промежуток времени между двумя моментами. Go включает в себя несколько предопределенных констант, которые делают создание длительностей простым и понятным:

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

Наиболее часто используемыми константами продолжительности являются time.Nanosecond, time.Microsecond, time.Millisecond, time.Second, time.Minute и time.Hour. Вы можете умножать эти константы на целые числа, чтобы создать именно ту продолжительность, которая вам необходима.

Значения длительности (Duration) необходимы для арифметики времени, операций планирования и управления таймингом в ваших программах. Они бесшовно взаимодействуют с другими функциями времени и предоставляют понятный и читаемый способ выражения временных интервалов в коде.

quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

challenge icon

Задание

Легко

Создайте таймер тренировки, который использует time.Duration для отслеживания различных интервалов упражнений и периодов отдыха. Эта задача проверит ваше умение создавать значения длительности, используя предопределенные константы Go, и выполнять с ними вычисления.

Вы получите два входных значения:

  • Строка, содержащая определения упражнений в формате "exercise1:duration_value:duration_unit,exercise2:duration_value:duration_unit" (например, "Push-ups:30:Second,Plank:2:Minute,Squats:45:Second")
  • Строка, содержащая информацию о периоде отдыха в формате "rest_duration_value:rest_duration_unit" (например, "15:Second")

Ваша задача:

  1. Разобрать первый ввод, разделив его по запятым, чтобы получить записи об отдельных упражнениях
  2. Для каждой записи упражнения разделить ее по двоеточиям, чтобы извлечь название упражнения, значение длительности (как строку) и единицу измерения длительности
  3. Разобрать второй ввод, разделив его по двоеточиям, чтобы получить значение и единицу измерения длительности отдыха
  4. Преобразовать значения длительности из строк в целые числа и создать объекты time.Duration, используя соответствующие константы:
    • Для "Second": умножить на time.Second
    • Для "Minute": умножить на time.Minute
    • Для "Hour": умножить на time.Hour
  5. Вывести заголовок приложения: "=== WORKOUT SESSION TIMER ==="
  6. Вывести сообщение о настройке сессии: "Setting up workout session..."
  7. Для каждого упражнения вывести: "Exercise: [exercise_name] - Duration: [duration_object]"
  8. Вывести период отдыха: "Rest period between exercises: [rest_duration_object]"
  9. Рассчитать и вывести разбивку сессии:
    • "=== SESSION BREAKDOWN ==="
    • Для каждого упражнения: "[exercise_name]: [duration_in_seconds] seconds"
    • "Rest periods: [rest_duration_in_seconds] seconds each"
  10. Рассчитать общее время сессии (сумма всех длительностей упражнений плюс периоды отдыха между упражнениями):
    • "=== TIMING CALCULATIONS ==="
    • "Total exercise time: [total_exercise_duration_object]"
    • "Total rest time: [total_rest_duration_object]" (периоды отдыха между упражнениями, то есть на один меньше, чем количество упражнений)
    • "Complete session duration: [total_session_duration_object]"
  11. Вывести статистику сессии:
    • "=== 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. Вывести преобразования времени:
    • "=== TIME CONVERSIONS ==="
    • "Session duration in minutes: [total_minutes]" (преобразовать общую длительность сессии в минуты)
    • "Session duration in hours: [total_hours]" (преобразовать общую длительность сессии в часы, показать в виде десятичного числа)
  13. Вывести сообщение о завершении: "Workout session timer configured successfully"

Используйте пакет time для работы с длительностями, пакет strings для разделения входных строк, пакет strconv для преобразования строковых чисел в целые и пакет fmt для форматированного вывода. Помните, что значения time.Duration можно складывать и преобразовывать в различные единицы измерения с помощью таких методов, как Seconds(), Minutes() и Hours(). Эта задача демонстрирует, как создавать и манипулировать значениями длительности для приложений, работающих со временем.

Шпаргалка

Go предоставляет тип time.Duration для представления промежутков времени между двумя моментами.

Создавайте длительности, используя предопределенные константы, умноженные на целые числа:

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

Общие константы длительности включают:

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

Значения длительности можно складывать и преобразовывать в различные единицы измерения с помощью таких методов, как Seconds(), Minutes() и Hours().

Попробуйте сами

package main

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

func main() {
	// Считать ввод
	var exerciseInput string
	var restInput string
	fmt.Scanln(&exerciseInput)
	fmt.Scanln(&restInput)
	
	// Разобрать упражнения из ввода
	exerciseEntries := strings.Split(exerciseInput, ",")
	
	// Разобрать период отдыха из ввода
	restParts := strings.Split(restInput, ":")
	
	// TODO: Напишите свой код ниже
	// 1. Разобрать каждую запись упражнения, чтобы извлечь название, значение длительности и единицу измерения
	// 2. Преобразовать значения длительности в целые числа и создать объекты time.Duration
	// 3. Разобрать длительность отдыха и создать объект time.Duration
	// 4. Отобразить информацию о тренировке и расчеты
	// 5. Рассчитать статистику сессии и преобразования времени
	
	// Не забудьте вывести всю необходимую информацию, как указано в задании
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Логика и управление потоком