Menu
CoddyTech

Khoảng thời gian

Thuộc phần Logic và luồng điều khiển trong hành trình GO của Coddy. Bài học 62 trên 68.

Khi làm việc với thời gian trong Go, bạn thường cần biểu diễn các khoảng thời gian, chẳng hạn như "5 minutes" hoặc "2 hours". Go cung cấp kiểu time.Duration dành riêng cho mục đích này.

time.Duration biểu thị khoảng thời gian giữa hai thời điểm. Go có một số hằng số được định nghĩa sẵn, giúp tạo khoảng thời gian một cách đơn giản và dễ đọc:

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

Các hằng số thời lượng được dùng phổ biến nhất là time.Nanosecond, time.Microsecond, time.Millisecond, time.Second, time.Minute và time.Hour. Bạn có thể nhân các hằng số này với số nguyên để tạo ra thời lượng chính xác mà bạn cần.

Giá trị thời lượng rất cần thiết cho các phép tính thời gian, thao tác lên lịch và kiểm soát thời gian trong chương trình. Chúng hoạt động liền mạch với các hàm thời gian khác và giúp bạn biểu diễn khoảng thời gian trong code một cách rõ ràng, dễ đọc.

challenge icon

Thử thách

Dễ

Tạo bộ hẹn giờ cho buổi tập, dùng time.Duration để theo dõi các khoảng thời gian tập luyện và nghỉ ngơi. Thử thách này sẽ kiểm tra khả năng tạo giá trị thời lượng bằng các hằng số có sẵn của Go và thực hiện phép tính với chúng.

Bạn sẽ nhận được hai đầu vào:

  • Một chuỗi chứa thông tin các bài tập theo định dạng "exercise1:duration_value:duration_unit,exercise2:duration_value:duration_unit" (ví dụ: "Push-ups:30:Second,Plank:2:Minute,Squats:45:Second")
  • Một chuỗi chứa thông tin thời gian nghỉ theo định dạng "rest_duration_value:rest_duration_unit" (ví dụ: "15:Second")

Nhiệm vụ của bạn là:

  1. Phân tích đầu vào thứ nhất bằng cách tách chuỗi tại dấu phẩy để lấy từng mục bài tập
  2. Với mỗi mục bài tập, tách chuỗi tại dấu hai chấm để lấy tên bài tập, giá trị thời lượng (dạng chuỗi) và đơn vị thời lượng
  3. Phân tích đầu vào thứ hai bằng cách tách chuỗi tại dấu hai chấm để lấy giá trị và đơn vị thời gian nghỉ
  4. Chuyển các giá trị thời lượng từ chuỗi thành số nguyên và tạo các đối tượng time.Duration bằng các hằng số phù hợp:
    • Với "Second": nhân với time.Second
    • Với "Minute": nhân với time.Minute
    • Với "Hour": nhân với time.Hour
  5. Hiển thị tiêu đề ứng dụng: "=== WORKOUT SESSION TIMER ==="
  6. Hiển thị thông tin thiết lập buổi tập: "Setting up workout session..."
  7. Với mỗi bài tập, hiển thị: "Exercise: [exercise_name] - Duration: [duration_object]"
  8. Hiển thị thời gian nghỉ: "Rest period between exercises: [rest_duration_object]"
  9. Tính toán và hiển thị thông tin chi tiết về buổi tập:
    • "=== SESSION BREAKDOWN ==="
    • Với mỗi bài tập: "[exercise_name]: [duration_in_seconds] seconds"
    • "Rest periods: [rest_duration_in_seconds] seconds each"
  10. Tính tổng thời gian buổi tập (tổng thời lượng của tất cả bài tập cộng với thời gian nghỉ giữa các bài tập):
    • "=== TIMING CALCULATIONS ==="
    • "Total exercise time: [total_exercise_duration_object]"
    • "Total rest time: [total_rest_duration_object]" (thời gian nghỉ giữa các bài tập, vì vậy số lần nghỉ ít hơn số bài tập một lần)
    • "Complete session duration: [total_session_duration_object]"
  11. Hiển thị thống kê buổi tập:
    • "=== 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. Hiển thị kết quả chuyển đổi thời gian:
    • "=== TIME CONVERSIONS ==="
    • "Session duration in minutes: [total_minutes]" (chuyển tổng thời lượng buổi tập sang phút)
    • "Session duration in hours: [total_hours]" (chuyển tổng thời lượng buổi tập sang giờ, hiển thị dưới dạng số thập phân)
  13. Hiển thị thông báo hoàn tất: "Workout session timer configured successfully"

Dùng gói time để làm việc với thời lượng, gói strings để tách các chuỗi đầu vào, gói strconv để chuyển các số dạng chuỗi thành số nguyên và gói fmt để định dạng đầu ra. Hãy nhớ rằng các giá trị time.Duration có thể được cộng với nhau và chuyển đổi sang các đơn vị khác bằng những phương thức như Seconds(), Minutes() và Hours(). Thử thách này minh họa cách tạo và thao tác với các giá trị thời lượng trong ứng dụng tính thời gian.

Tự làm thử

package main

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

func main() {
	// Đọc đầu vào
	var exerciseInput string
	var restInput string
	fmt.Scanln(&exerciseInput)
	fmt.Scanln(&restInput)
	
	// Phân tích các bài tập từ đầu vào
	exerciseEntries := strings.Split(exerciseInput, ",")
	
	// Phân tích thời gian nghỉ từ đầu vào
	restParts := strings.Split(restInput, ":")
	
	// TODO: Viết code bên dưới
	// 1. Phân tích từng mục bài tập để lấy tên, giá trị thời lượng và đơn vị
	// 2. Chuyển các giá trị thời lượng thành số nguyên và tạo các đối tượng time.Duration
	// 3. Phân tích thời gian nghỉ và tạo đối tượng time.Duration
	// 4. Hiển thị thông tin buổi tập và các kết quả tính toán
	// 5. Tính số liệu thống kê của buổi tập và chuyển đổi thời gian
	
	// Nhớ in ra đầy đủ thông tin theo yêu cầu của thử thách
}
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Logic và luồng điều khiển

Tự luyện tập: Trình biên dịch Go online