Menu
CoddyTech

获取当前时间

本课属于 Coddy GO 学习旅程的“逻辑与流程”单元。第 58 课,共 68 课。

在 Go 程序中处理日期和时间时,你需要使用 Go 内置的 time 包。这个包提供了处理时间相关操作所需的所有功能。

最常见的起点是获取当前时间。Go 通过 time.Now() 函数让这件事变得很简单:

package main

import (
    "fmt"
    "time"
)

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

time.Now() 函数会返回一个表示当前时刻的 time.Time 对象。打印这个对象时,它会以易读的格式显示日期和时间,包括时区信息。

这个 time.Time 对象包含了那个特定时刻的所有信息:年、月、日、小时、分钟、秒,甚至纳秒。在 Go 中,其他所有时间操作都将以它为基础。

challenge icon

挑战

简单

创建一个时间跟踪应用,用于获取当前时间并以多种格式显示。本挑战将测试你使用 time.Now() 函数,以及处理 time.Time 对象并提取当前时刻不同组成部分的能力。

你将收到一个输入:

  • 一个字符串,其中包含以逗号分隔的显示格式请求,格式为 "format1,format2,format3"(例如:"full,date,time,year,month,day")

你的任务是:

  1. 使用 time.Now() 获取当前时间,并将其存储在一个变量中
  2. 显示应用程序标题:"=== TIME TRACKER APPLICATION ==="
  3. 显示时间戳获取确认信息:"Current time captured successfully"
  4. 通过按逗号拆分输入,解析出各个格式请求
  5. 显示格式标题:"Displaying time in requested formats:"
  6. 对于每个格式请求,根据指定格式显示时间信息:
    • 对于 "full":显示 "Full timestamp: [complete_time_object]"
    • 对于 "date":显示 "Date only: [year]-[month]-[day]"(使用 Date() 方法返回的组成部分)
    • 对于 "time":显示 "Time only: [hour]:[minute]:[second]"(使用 Hour()、Minute()、Second() 方法)
    • 对于 "year":显示 "Year: [year_value]"(使用 Year() 方法)
    • 对于 "month":显示 "Month: [month_name]"(使用 Month() 方法)
    • 对于 "day":显示 "Day: [day_value]"(使用 Day() 方法)
    • 对于 "weekday":显示 "Weekday: [weekday_name]"(使用 Weekday() 方法)
    • 对于 "unix":显示 "Unix timestamp: [unix_seconds]"(使用 Unix() 方法)
  7. 统计并显示相关数据:
    • "=== TIME INFORMATION SUMMARY ==="
    • "Total formats displayed: [number_of_formats]"
    • "Timestamp components extracted: [number_of_unique_components]"
  8. 显示其他时间详情:
    • "Additional time details:"
    • "- Nanoseconds: [nanosecond_value]"(使用 Nanosecond() 方法)
    • "- Location: [timezone_location]"(使用 Location() 方法)
    • "- Is zero time: [true_or_false]"(使用 IsZero() 方法)
  9. 显示完成信息:"Time tracking completed - all requested formats processed"

使用 time 包处理时间对象,使用 strings 包拆分输入字符串,并使用 fmt 包格式化输出。请记住,time.Now() 会返回一个 time.Time 对象,其中包含当前时刻的所有信息。你可以使用该对象提供的各种方法提取特定组成部分。本挑战将演示如何获取当前时间,并从单个 time.Time 对象中提取不同的信息。

亲手试试

package main

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

func main() {
	// 读取输入
	var formatRequests string
	fmt.Scanln(&formatRequests)
	
	// 使用固定时间,确保输出一致(Go 的参考时间)
	// 使用 time.Date 而不是 time.Now(),确保结果可预测
	currentTime := time.Date(2006, 1, 2, 15, 4, 5, 0, time.UTC)
	
	// 拆分格式请求
	formats := strings.Split(formatRequests, ",")
	
	// TODO: 在下方编写你的代码
	// 显示应用程序标题
	// 显示时间戳获取成功的提示
	// 显示格式标题
	// 处理每个格式请求并显示相应结果
	// 使用 map 跟踪不重复的时间组成部分,以便计数
	// 使用正确的格式(例如,用 %02d 为数字补零)
	// 显示汇总统计信息
	// 显示更多时间详情
	// 显示完成消息
	
}
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

逻辑与流程中的所有课

自己练习: Go 在线编译器