Time中定义的时间格式化常量:
const ( ANSIC = "Mon Jan _2 15:04:05 2006" UnixDate = "Mon Jan _2 15:04:05 MST 2006" RubyDate = "Mon Jan 02 15:04:05 -0700 2006" RFC822 = "02 Jan 06 15:04 MST" RFC822Z = "02 Jan 06 15:04 -0700" // RFC822 with numeric zone RFC850 = "Monday, 02-Jan-06 15:04:05 MST" RFC1123 = "Mon, 02 Jan 2006 15:04:05 MST" RFC1123Z = "Mon, 02 Jan 2006 15:04:05 -0700" // RFC1123 with numeric zone RFC3339 = "2006-01-02T15:04:05Z07:00" RFC3339Nano = "2006-01-02T15:04:05.999999999Z07:00" Kitchen = "3:04PM" // Handy time stamps. Stamp = "Jan _2 15:04:05" StampMilli = "Jan _2 15:04:05.000" StampMicro = "Jan _2 15:04:05.000000" StampNano = "Jan _2 15:04:05.000000000" ) |
这些常量是在time包中进行time格式化和time解析而预定义的一些常量,它们实际上都是同一个时间:
Mon Jan 2 15:04:05 MST 2006
换算成Unix时间为1136239445,MST时间是GMT-0700(UTC -07:00),上面定义时间可以被理解为下面这个格式:
01/02 03:04:05PM '06-0700 (注:01对应Month,02对应Day,03对应Hour,04对应Minute,05对应Second,06对应四位Year的后两位)
可以模仿上面的格式定义一个自己的时间输出格式:
layout := "Year:2006 Month:01 Day:02 Hour:03 Min:04 Second:05" fmt.Println(time.Now().Format(layout)) |
输出:
Year:2017 Month:02 Day:16 Hour:05 Min:04 Second:36 |
也可以使用前面常量中定义的格式来格式化Time:
fmt.Println(time.Now().Format(time.RFC1123)) |
After函数:
定义:func After(d Duration) <-chan Time (返回值是一个单向channel)
After接受一个time.Duration参数,等待参数指定的时间后,返回一个类型为Time的channel,并向这个channel中发送一个当前时间的Time对象。
示例(利用After来设定等待超时时间):
fmt.Println(time.Now()) c := make(chan int) go func() { time.Sleep(time.Second * 10) c <- 1 } () select { case x := <- c: fmt.Println("Received", x) case t := <- time.After(time.Second * 5): fmt.Println("Timeout at", t) } |
Sleep函数:
定义:func Sleep(d Duration)
Sleep方法根据传入的time.Duration参数阻塞当前goroutine,如果传入0或者负值,则直接返回。
Tick函数:
定义:func Tick(dDuration) <-chan Time
Tick方法接受一个time.Duration参数,返回一个Timechannel,并且每隔一段时间(参数Duration定义的时间)会向该channel中传入一个当前时间的Time对象。当传入的参数d <= 0的时候,Tick会返回nil。
示例:
c := time.Tick(time.Second * 5) fmt.Println(time.Now()) func() { for i := 0; i < 3; i++ { select { case t := <- c: fmt.Println(t) } } } () |
Duration类型:
一个Duration类型变量代表了2个int64类型的纳秒(nanosecond)的差值(所以它本身也是int64类型),最大的Duration不能超过290年。
常量定义:
const ( Nanosecond Duration = 1 Microsecond = 1000 * Nanosecond Millisecond = 1000 * Microsecond Second = 1000 * Millisecond Minute = 60 * Second Hour = 60 * Minute ) |
可以通过乘法得到Duration:
var d Duration d = time.Second * 5 // 5 seconds |
ParseDuration函数:
定义:func ParseDuration(sstring) (Duration, error)
ParseDuration方法接受一个string参数,该string参数为一个由有符号的十进制数字与时间单位的组成的字符串,例如“300ms”,"-1.5h"或者"2h45m",有效的时间单位有:"ns","us"("µs"),"ms","s","m","h"
Since函数:
定义:func Since(t Time)Duration
该方法返回自参数t到现在一共经过的时间,等价于time.Now().Sub(t)
Duration的Hours方法:
定义:func (d Duration) Hours()float64
返回一个Duration结构对应的小时数(即将Duration换算成小时的值)
Duration的Minutes方法:
定义:func (dDuration) Minutes() float64
返回一个Duration结构对应的分钟数(即将Duration换算成分钟的值)
Duration的Nanoseconds方法:
定义:func (dDuration) Nanoseconds() int64
返回一个Duration结构对应的纳秒数(即将Duration换算成纳秒的值,注意这里的返回值是整形)
Duration的Seconds方法:
定义:func (dDuration) Seconds() float64
返回一个Duration结构对应的秒数(即将Duration换算成秒的值)
Duration的String方法:
定义:func (d Duration)String() string
该方法为ParseDuration的逆运算,用于将一个Duration转换为一个类似于"72h3m5s"这种格式的字符串
Location类型:
Location代表时区,主要用于计算时间的偏移量
FixedZone函数:
定义:funcFixedZone(name string, offset int) *Location
该方法根据参数中给定的时区名称以及偏移值(从UTC时区向东经过的秒数)返回一个Locaiton对象
LoadLocation函数:
定义:funcLoadLocation(name string) (*Location, error)
该方法根据参数指定的时区名称返回一个Location对象,例如"UTC"返回UTC Location,"Local"返回本地时区
Location的String方法:
定义:func (l*Location) String() string
返回一个参数Location对应的时区的描述性名称
Month类型:
Month有关的常量定义:
const ( January Month = 1 + iota February March April May June July August September October November December ) |
Month的String方法:
定义:func (m Month)String() string
返回"January","February"….这些代表月份的字符串
ParseError类型:
ParseError结构定义了将一个string解析成Time对象时的错误
type ParseError struct { Layout string Value string LayoutElem string ValueElem string Message string } |
ParseError的Error方法:
定义:func (e*ParseError) Error() string
该方法返回一个代表该ParseError的字符串
Ticker类型:
Ticker类型包含了一个用于时钟轮询的channel
type Ticker struct { C <-chan Time // The channel on which the ticks are delivered. // contains filtered or unexported fields } |
NewTicker函数:
定义:func NewTicker(dDuration) *Ticker
该方法返回一个包含一个channel的Ticker对象,根据传入的Duration参数,该channel中会每隔对应的时间放入一个代表当前时间的Time对象,参数d必须大于0,否则该函数会Panic。Stop方法会释放掉相关资源。
Ticker的Stop方法:
定义:func (t *Ticker)Stop()
刚方法停止一个Ticker,当停止后,对应的channel中不再产生新的Time对象,但是该方法不会关闭对应的channel,以防止从该channel中读取Time对象的操作会错误的结束
Ticker的示例:
tk := time.NewTicker(time.Second) for i := 0; i < 10; i++ { select { case t := <- tk.C: fmt.Println(t) } } tk.Stop() |