本人机器的go版本为1.10.3,所以对于time库的研究是基于go1.10.3,下面是time库下的所有go文件。
先排除xxx_test.go
文件,主要的文件为:
- time.go
- format.go
- zoneinfo.go
- sleep.go
- tick.go
其他的sys_xxx.go
和zoneinfo_xxx.go
都是zoneinfo.go
的附庸,兼容不同平台打开$GOROOT/lib/time/zoneinfo.zip
,进行指定时区的分析工作。
而sleep.go和tick.go,其实是time.Duration延伸的功能,主要服务于goroutine的工作,这里暂时不讨论这两个文件。
time.go, format.go, zoneinfo.go的主要可以的调用方法和简单解释如下:
package main
import (
"time"
"fmt"
"reflect"
)
func main() {
genUTCTime()
genUTCTime1()
parseTime()
parseDuration()
now := time.Now()
formatTime := timeStampFormat(now.UnixNano())
fmt.Println(formatTime)
fmt.Println(now)
fmt.Println(now.UnixNano()) // 生成时间戳19位
fmt.Println(now.UnixNano() / 1e6)
fmt.Println(now.Unix()) // 时间戳10位
// 生成两个时间的差值 :时间段
lastTime := time.Unix(0, 1550714939515549582)
dur := now.UTC().Sub(lastTime.UTC())
fmt.Printf("duration is: %v\n", dur)
fmt.Printf("duration to string is: %s\n", dur.String())
fmt.Printf("duration to Nanoseconds is: %v\n", dur.Nanoseconds())
fmt.Printf("duration to Seconds is: %v\n", dur.Seconds())
fmt.Printf("duration to Minutes is: %v\n", dur.Minutes())
fmt.Printf("duration to Hour is: %v\n", dur.Hours())
secondTime := time.Unix(0, 1550721050238199291