Menu
CoddyTech

Lấy thời gian hiện tại

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 58 trên 68.

Khi làm việc với ngày tháng và thời gian trong chương trình Go, bạn sẽ cần dùng gói time tích hợp sẵn của Go. Gói này cung cấp mọi chức năng bạn cần để thực hiện các thao tác liên quan đến thời gian.

Cách bắt đầu phổ biến nhất là lấy thời gian hiện tại. Go giúp việc này trở nên đơn giản với hàm time.Now():

package main

import (
    "fmt"
    "time"
)

func main() {
    now := time.Now()
    fmt.Println(now)
}

Hàm time.Now() trả về một đối tượng time.Time biểu thị thời điểm hiện tại. Khi bạn in đối tượng này ra, nó hiển thị ngày và giờ theo định dạng dễ đọc, bao gồm thông tin múi giờ.

Đối tượng time.Time này chứa mọi thông tin về thời điểm cụ thể đó: năm, tháng, ngày, giờ, phút, giây và cả nano giây. Bạn sẽ dùng đối tượng này làm nền tảng cho mọi thao tác khác về thời gian trong Go.

challenge icon

Thử thách

Dễ

Tạo một ứng dụng theo dõi thời gian, ghi nhận thời gian hiện tại và hiển thị thời gian theo nhiều định dạng. Thử thách này sẽ kiểm tra khả năng sử dụng hàm time.Now() và làm việc với các đối tượng time.Time để trích xuất những thành phần khác nhau của thời điểm hiện tại.

Bạn sẽ nhận một đầu vào:

  • Một chuỗi chứa các yêu cầu định dạng hiển thị, được phân tách bằng dấu phẩy theo định dạng "format1,format2,format3" (ví dụ: "full,date,time,year,month,day")

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

  1. Dùng time.Now() để ghi nhận thời gian hiện tại và lưu vào một biến
  2. Hiển thị tiêu đề ứng dụng: "=== TIME TRACKER APPLICATION ==="
  3. Hiển thị thông báo xác nhận đã ghi nhận dấu thời gian: "Current time captured successfully"
  4. Phân tích đầu vào bằng cách tách chuỗi theo dấu phẩy để lấy từng yêu cầu định dạng
  5. Hiển thị tiêu đề phần định dạng: "Displaying time in requested formats:"
  6. Với mỗi yêu cầu định dạng, hiển thị thông tin thời gian theo định dạng được chỉ định:
    • Với "full": Hiển thị "Full timestamp: [complete_time_object]"
    • Với "date": Hiển thị "Date only: [year]-[month]-[day]" (dùng các thành phần từ phương thức Date())
    • Với "time": Hiển thị "Time only: [hour]:[minute]:[second]" (dùng các phương thức Hour(), Minute(), Second())
    • Với "year": Hiển thị "Year: [year_value]" (dùng phương thức Year())
    • Với "month": Hiển thị "Month: [month_name]" (dùng phương thức Month())
    • Với "day": Hiển thị "Day: [day_value]" (dùng phương thức Day())
    • Với "weekday": Hiển thị "Weekday: [weekday_name]" (dùng phương thức Weekday())
    • Với "unix": Hiển thị "Unix timestamp: [unix_seconds]" (dùng phương thức Unix())
  7. Đếm và hiển thị số liệu thống kê:
    • "=== TIME INFORMATION SUMMARY ==="
    • "Total formats displayed: [number_of_formats]"
    • "Timestamp components extracted: [number_of_unique_components]"
  8. Hiển thị thông tin thời gian bổ sung:
    • "Additional time details:"
    • "- Nanoseconds: [nanosecond_value]" (dùng phương thức Nanosecond())
    • "- Location: [timezone_location]" (dùng phương thức Location())
    • "- Is zero time: [true_or_false]" (dùng phương thức IsZero())
  9. Hiển thị thông báo hoàn tất: "Time tracking completed - all requested formats processed"

Dùng gói time để làm việc với các đối tượng thời gian, gói strings để tách chuỗi đầu vào và gói fmt để định dạng đầu ra. Hãy nhớ rằng time.Now() trả về một đối tượng time.Time chứa mọi thông tin về thời điểm hiện tại. Bạn có thể trích xuất các thành phần cụ thể bằng những phương thức có sẵn của đối tượng này. Thử thách này hướng dẫn cách ghi nhận thời gian hiện tại và trích xuất những thông tin khác nhau từ một đối tượng time.Time.

Tự làm thử

package main

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

func main() {
	// Đọc đầu vào
	var formatRequests string
	fmt.Scanln(&formatRequests)
	
	// Dùng thời điểm cố định để đầu ra nhất quán (thời điểm tham chiếu của Go)
	// Thay vì time.Now(), dùng time.Date để có kết quả dự đoán được
	currentTime := time.Date(2006, 1, 2, 15, 4, 5, 0, time.UTC)
	
	// Tách các yêu cầu định dạng
	formats := strings.Split(formatRequests, ",")
	
	// TODO: Viết code bên dưới
	// Hiển thị tiêu đề ứng dụng
	// Hiển thị thông báo xác nhận đã ghi nhận dấu thời gian
	// Hiển thị tiêu đề phần định dạng
	// Xử lý từng yêu cầu định dạng và hiển thị kết quả tương ứng
	// Dùng map để theo dõi các thành phần không trùng lặp khi đếm
	// Dùng định dạng phù hợp (ví dụ: %02d cho số có thêm số 0 ở đầu)
	// Hiển thị thống kê tổng hợp
	// Hiển thị thêm thông tin chi tiết về thời gian
	// Hiển thị thông báo hoàn tất
	
}
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