时间与时长
表示时间瞬间和间隔
时间与时长 是 CoddyKit 上的免费 Go Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Go Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Go Academy 课程共包含 4 节课。
time 包
Go 的 time 包用于表示时间中的时刻以及时刻之间的时间跨度。
time.Time表示一个具体时刻。time.Duration表示一段时间。
package main
import (
"fmt"
"time"
)
func main() {
var d time.Duration = 2 * time.Second
fmt.Println(d)
}获取当前时间
time.Now() 会以 time.Time 的形式返回当前时刻。(其确切值取决于程序运行的时间。)
package main
import (
"fmt"
"time"
)
func main() {
now := time.Now()
fmt.Println(now.Year())
}构建特定时间
time.Date 根据各个组成部分构造一个确切时刻:年、月、日、小时、分钟、秒、纳秒和位置。
package main
import (
"fmt"
"time"
)
func main() {
t := time.Date(2026, time.May, 30, 9, 0, 0, 0, time.UTC)
fmt.Println(t)
}读取时间组成部分
time.Time 提供了 Year、Month、Day、Hour 和 Weekday 等方法。
package main
import (
"fmt"
"time"
)
func main() {
t := time.Date(2026, time.May, 30, 0, 0, 0, 0, time.UTC)
fmt.Println(t.Month(), t.Day(), t.Weekday())
}时间长度常量
请通过乘以单位常量来构建时间长度:time.Hour、time.Minute、time.Second、time.Millisecond。
package main
import (
"fmt"
"time"
)
func main() {
d := 1*time.Hour + 30*time.Minute
fmt.Println(d)
}转换时间长度
Seconds()、Minutes() 和 Hours() 等方法会以该单位的 float64 形式返回时间长度。
package main
import (
"fmt"
"time"
)
func main() {
d := 90 * time.Minute
fmt.Println(d.Hours())
fmt.Println(d.Seconds())
}添加时间
t.Add(d) 会返回一个按指定时间长度偏移的新时间。原始值不会改变,因为 time.Time 是值类型。
package main
import (
"fmt"
"time"
)
func main() {
t := time.Date(2026, time.May, 30, 9, 0, 0, 0, time.UTC)
later := t.Add(2 * time.Hour)
fmt.Println(later.Hour())
}添加日历单位
t.AddDate(years, months, days) 会按日历单位进行偏移,并正确处理每个月的天数和闰年。
package main
import (
"fmt"
"time"
)
func main() {
t := time.Date(2026, time.January, 31, 0, 0, 0, 0, time.UTC)
next := t.AddDate(0, 1, 0)
fmt.Println(next.Month(), next.Day())
}时间差
t2.Sub(t1) 返回两个时间之间的 Duration。结果为负数表示 t2 更早。
package main
import (
"fmt"
"time"
)
func main() {
a := time.Date(2026, time.May, 30, 9, 0, 0, 0, time.UTC)
b := time.Date(2026, time.May, 30, 12, 0, 0, 0, time.UTC)
fmt.Println(b.Sub(a))
}比较时间
使用 Before、After 和 Equal 比较时刻。请避免使用 ==,因为它还会比较内部位置。
package main
import (
"fmt"
"time"
)
func main() {
a := time.Date(2026, 5, 30, 9, 0, 0, 0, time.UTC)
b := time.Date(2026, 5, 30, 10, 0, 0, 0, time.UTC)
fmt.Println(a.Before(b))
}Unix 时间戳
t.Unix() 返回自 1970 年 1 月 1 日起经过的秒数。time.Unix(sec, 0) 可将其转换回 time.Time。
package main
import (
"fmt"
"time"
)
func main() {
t := time.Date(2026, 5, 30, 0, 0, 0, 0, time.UTC)
secs := t.Unix()
fmt.Println(time.Unix(secs, 0).UTC().Year())
}快速检查
t2.Sub(t1) 返回什么?
回顾:时间与时长
您已经学习了时间的核心模型:
time.Time表示一个时刻;time.Duration表示一段时长。- 使用
Now和Date创建时间;使用Add和AddDate调整时间。 - 使用
Sub计算时间差,使用Before/After进行比较。
package main
import (
"fmt"
"time"
)
func main() {
start := time.Date(2026, 5, 30, 8, 0, 0, 0, time.UTC)
end := start.Add(45 * time.Minute)
fmt.Println(end.Sub(start).Minutes(), "minutes")
}常见问题解答
「时间与时长」课时是免费的吗?
是的 — 「时间与时长」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Go Academy 课程的其余内容,请升级到 CoddyKit PRO。 Go Academy 课程共包含 4 节课。
「时间与时长」这节课中我会学到什么?
表示时间瞬间和间隔 你通过在浏览器中直接运行的动手代码来练习 Go Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Go Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Go Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。
「时间与时长」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Go Academy 课中编写并运行代码吗?
能。每节 Go Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。