时间包提供测量和显示时间的功能。 日历总是假设计算一个公历,并且没有闰秒。
单调时钟 操作系统既提供“挂钟”,也可以改变时钟同步,而“单调时钟”则不然。一般规则是挂钟用于告知时间,单调时钟用于测量时间。在这个包中 Time.Now 既包含挂钟读数和又包含单调时钟读数,它不拆分为两个 API;稍后的时间报告操作使用挂钟读数,但后来的时间测量操作,特别是比较和减法,使用单调时钟读数。
例如,即使在定时操作期间更改挂钟,此代码也始终计算大约 20 毫秒的正经过时间:
start:= time.Now()
......需要 20 毫秒的操作......
t:= time.Now()
elapsed:= t.Sub(start)
其他习语,例如 time.Since(start),time.Until(deadline)和 time.Now()。在(截止日期)之前,对墙壁时钟重置同样具有鲁棒性。
常量 这些是在 Time.Format 和 time.Parse 中使用的预定义布局。 布局中使用的参考时间是特定时间:
Unix时间:
Mon Jan 2 15:04:05 MST 2006
package main
import (
"fmt"
"time"
)
var c chan int
func statusUpdate() string { return "" }
func handle(int) {}
func main() {
// 格式化
fmt.Println(time.Now().Format("2006-01-02 15:04:05")) // 这是个奇葩,必须是这个时间点, 据说是go诞生之日, 记忆方法:6-1-2-3-4-5
// 休眠100毫秒
time.Sleep(100 * time.Millisecond)
select {
case m := <-c:
handle(m)
// 在一分钟之后执行
case <-time.After(1 * time.Minute):
fmt.Println("timed out")
}
fmt.Println("After 1 minute,Now I can do")
// 每分钟执行一次滴答
c := time.Tick(1 * time.Minute)
for now := range c {
fmt.Printf("%v %s\n", now, statusUpdate())
}
// 该句不会执行
fmt.Println("I can't do it")
// 其它内容请参考官方time包
}