Go语言中Time的用法[1]



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时间为1136239445MST时间是GMT-0700UTC -07:00),上面定义时间可以被理解为下面这个格式:

01/02 03:04:05PM '06-0700 (注:01对应Month02对应Day03对应Hour04对应Minute05对应Second06对应四位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)

 

DurationHours方法:

定义:func (d Duration) Hours()float64

返回一个Duration结构对应的小时数(即将Duration换算成小时的值)

 

DurationMinutes方法:

定义:func (dDuration) Minutes() float64

返回一个Duration结构对应的分钟数(即将Duration换算成分钟的值)

 

DurationNanoseconds方法:

定义:func (dDuration) Nanoseconds() int64

返回一个Duration结构对应的纳秒数(即将Duration换算成纳秒的值,注意这里的返回值是整形)

 

DurationSeconds方法:

定义:func (dDuration) Seconds() float64

返回一个Duration结构对应的秒数(即将Duration换算成秒的值)

 

DurationString方法:

定义: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()

你可能感兴趣的:(Golang,Programming,程序设计)