时间间隔
本课属于 Coddy GO 学习旅程的“逻辑与流程”单元。第 62 课,共 68 课。
在 Go 中处理时间时,你经常需要表示一段时间,比如“5 minutes”或“2 hours”。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。你可以将这些常量乘以整数,创建所需的精确时长。
持续时间值对于时间运算、安排操作以及控制程序中的计时至关重要。它们可以与其他时间函数无缝配合,并提供一种清晰易读的方式,用于在代码中表示时间跨度。
挑战
简单创建一个锻炼课程计时器,使用 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]"(锻炼之间的休息时长,因此比锻炼次数少 1 次)"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() 等方法转换为不同的单位。这个挑战将展示如何为计时应用创建和操作时长值。
亲手试试
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. 计算锻炼安排的统计数据并转换时间单位
// 记得按照挑战要求输出所有必要信息
}这节课包含一个小测验。开始学习即可作答,并记录你的进度。
逻辑与流程中的所有课
自己练习: Go 在线编译器