获取当前时间
本课属于 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 中,其他所有时间操作都将以它为基础。
挑战
简单创建一个时间跟踪应用,用于获取当前时间并以多种格式显示。本挑战将测试你使用 time.Now() 函数,以及处理 time.Time 对象并提取当前时刻不同组成部分的能力。
你将收到一个输入:
- 一个字符串,其中包含以逗号分隔的显示格式请求,格式为
"format1,format2,format3"(例如:"full,date,time,year,month,day")
你的任务是:
- 使用
time.Now()获取当前时间,并将其存储在一个变量中 - 显示应用程序标题:
"=== TIME TRACKER APPLICATION ===" - 显示时间戳获取确认信息:
"Current time captured successfully" - 通过按逗号拆分输入,解析出各个格式请求
- 显示格式标题:
"Displaying time in requested formats:" - 对于每个格式请求,根据指定格式显示时间信息:
- 对于
"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() 方法)
- 对于
- 统计并显示相关数据:
"=== TIME INFORMATION SUMMARY ===""Total formats displayed: [number_of_formats]""Timestamp components extracted: [number_of_unique_components]"
- 显示其他时间详情:
"Additional time details:""- Nanoseconds: [nanosecond_value]"(使用 Nanosecond() 方法)"- Location: [timezone_location]"(使用 Location() 方法)"- Is zero time: [true_or_false]"(使用 IsZero() 方法)
- 显示完成信息:
"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 为数字补零)
// 显示汇总统计信息
// 显示更多时间详情
// 显示完成消息
}这节课包含一个小测验。开始学习即可作答,并记录你的进度。
逻辑与流程中的所有课
自己练习: Go 在线编译器