Длительность времени
Часть раздела Логика и управление потоком путешествия по 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) необходимы для арифметики времени, операций планирования и управления таймингом в ваших программах. Они бесшовно взаимодействуют с другими функциями времени и предоставляют понятный и читаемый способ выражения временных интервалов в коде.
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Задание
ЛегкоСоздайте таймер тренировки, который использует 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")
Ваша задача:
- Разобрать первый ввод, разделив его по запятым, чтобы получить записи об отдельных упражнениях
- Для каждой записи упражнения разделить ее по двоеточиям, чтобы извлечь название упражнения, значение длительности (как строку) и единицу измерения длительности
- Разобрать второй ввод, разделив его по двоеточиям, чтобы получить значение и единицу измерения длительности отдыха
- Преобразовать значения длительности из строк в целые числа и создать объекты
time.Duration, используя соответствующие константы:- Для
"Second": умножить наtime.Second - Для
"Minute": умножить наtime.Minute - Для
"Hour": умножить наtime.Hour
- Для
- Вывести заголовок приложения:
"=== WORKOUT SESSION TIMER ===" - Вывести сообщение о настройке сессии:
"Setting up workout session..." - Для каждого упражнения вывести:
"Exercise: [exercise_name] - Duration: [duration_object]" - Вывести период отдыха:
"Rest period between exercises: [rest_duration_object]" - Рассчитать и вывести разбивку сессии:
"=== SESSION BREAKDOWN ==="- Для каждого упражнения:
"[exercise_name]: [duration_in_seconds] seconds" "Rest periods: [rest_duration_in_seconds] seconds each"
- Рассчитать общее время сессии (сумма всех длительностей упражнений плюс периоды отдыха между упражнениями):
"=== TIMING CALCULATIONS ===""Total exercise time: [total_exercise_duration_object]""Total rest time: [total_rest_duration_object]"(периоды отдыха между упражнениями, то есть на один меньше, чем количество упражнений)"Complete session duration: [total_session_duration_object]"
- Вывести статистику сессии:
"=== 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"
- Вывести преобразования времени:
"=== TIME CONVERSIONS ===""Session duration in minutes: [total_minutes]"(преобразовать общую длительность сессии в минуты)"Session duration in hours: [total_hours]"(преобразовать общую длительность сессии в часы, показать в виде десятичного числа)
- Вывести сообщение о завершении:
"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.Nanosecondtime.Microsecondtime.Millisecondtime.Secondtime.Minutetime.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. Рассчитать статистику сессии и преобразования времени
// Не забудьте вывести всю необходимую информацию, как указано в задании
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
1Продвинутое управление потоком выполнения
Switch с использованием `fallthrough`Выход из вложенных цикловПродолжение конкретного циклаОператор `goto`Итоги: Продвинутое управление циклами4Проект: Простой список задач
Настройка проектаДобавление задачи7Углубленная обработка ошибок
Пользовательские типы ошибокОбертывание ошибок с помощью `%w`Распаковка с помощью `errors.Is`Распаковка с помощью `errors.As`Понимание `panic`Использование `recover`Итоги: Безопасное деление10Работа со временем
Получение текущего времениСоздание конкретного времениФорматирование времениПарсинг строк времениДлительность времениАрифметика времениОжидание и тикерыИтоги — Простой таймер2Структуры и методы
Определение методов для структурПолучатели по значениюПолучатели по указателюВыбор типа получателяМетоды против функцийИтоги: поведение структур5Карты: подробный разбор
Карты структурУказатели как значения картПроверка карт на nilСравнение картИтоги: счетчик частоты слов3Интерфейсы (Основы)
Что такое интерфейс?Определение интерфейсаРеализация интерфейсаИспользование интерфейсных типовПустой интерфейсУтверждение типаПереключатель типовИтоги: Фигуры и поведение