0Pricing
Go Academy · 课时

时间与时长

表示时间瞬间和间隔

时间与时长 是 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 反馈 — 无需本地设置。

此课程中的所有课时

  1. 时间与时长
  2. 格式化与解析
  3. 定时器与计时器
  4. 时区
← 返回 Go Academy