计算机教程

当前位置:3522.com > 计算机教程 > golang package time的用法具体详解

golang package time的用法具体详解

来源:http://www.4sports-uk.com 作者:3522.com 时间:2019-06-08 11:35

在我们编程过程中,经常会用到与时间相关的各种务需求,下面来介绍 golang 中有关时间的一些基本用法,我们从 time 的几种 type 来开始介绍。

time.Time{}

时间类型,包含了秒和纳秒以及Location

wall uint64//秒ext int64//纳秒loc *Location

时间可分为时间点与时间段, golang 也不例外,提供了以下两种基础类型

time.Month()

type Month int

月份.定义了十二个月的常量

  1. 时间点(Time)
  2. 时间段(Duration)

Weekday

type Weekday int 周,定义了一周的七天

除此之外 golang 也提供 了以下类型,做一些特定的业务

Duration

time.Duration()

持续时间.定义了以下持续时间类型.多用于时间的加减 需要传入Duration做为参数的时候

const ( Nanosecond Duration = 1 Microsecond = 1000 * Nanosecond Millisecond = 1000 * Microsecond Second = 1000 * Millisecond Minute = 60 * Second Hour = 60 * Minute)
  1. 时区(Location)
  2. Ticker
  3. Timer(定时器)

Location

在time包里有两个时区变量:

time.UTC utc时间time.Local 本地时间FixedZone(name string, offset int) *Location设置时区名,以及与UTC0的时间偏差.返回Location

我们将按以上顺序来介绍 time 包的使用。

Timer

定时器只会传达一次到期事件,

type Timer struct { C <-chan Time r runtimeTimer}

时间点(Time)

Ticker

周期性的传达到期事件的装置,

定时器只会传达一次到期事件,断续器会持续工作直到停止

type Ticker struct { C <-chan Time // The channel on which the ticks are delivered. r runtimeTimer}

我们使用的所有与时间相关的业务都是基于点而延伸的,两点组成一个时间段,大多数应用也都是围绕这些点与面去做逻辑处理。

time.Now()

获取当前时间,返回Time类型

初始化

func Sleep(d Duration)

表示睡多少时间,睡觉时,是阻塞状态

go 针对不同的参数类型提供了以下初始化的方式

Since Duration

返回与当前时间的时间差

// func Now() Time
 fmt.Println(time.Now())

 // func Parse(layout, value string) (Time, error)
 time.Parse("2016-01-02 15:04:05", "2018-04-23 12:24:51")

 // func ParseInLocation(layout, value string, loc *Location) (Time, error) (layout已带时区时可直接用Parse)
 time.ParseInLocation("2006-01-02 15:04:05", "2017-05-11 14:06:06", time.Local)

 // func Unix(sec int64, nsec int64) Time
 time.Unix(1e9, 0)

 // func Date(year int, month Month, day, hour, min, sec, nsec int, loc *Location) Time
 time.Date(2018, 1, 2, 15, 30, 10, 0, time.Local)

 // func (t Time) In(loc *Location) Time 当前时间对应指定时区的时间
 loc, _ := time.LoadLocation("America/Los_Angeles")
 fmt.Println(time.Now().In(loc))

 // func (t Time) Local() Time

Unix(sec int64, nsec int64) Time

根据秒数和纳秒,返回Time类型

(若只有秒或者毫秒,另一个参数为零)

获取到时间点之后为了满足业务和设计,需要转换成我们需要的格式,也就是所谓的时间格式化。

func Until Duration

计算t到当前的时间差.返回类型Duration

格式化

func After(d Duration) <-chan Time

返回一个time.C这个管道,d后会在此管道中放入一个时间点(time.Now

to string

func AfterFunc(d Duration, f func *Timer

将一个间隔和一个函数给AfterFunc后,间隔时间过后,执行传入的函数

格式化为字符串我们需要使用 time.Format 方法来转换成我们想要的格式

func NewTimer(d Duration) *Timer

新的定时创建一个新的定时器,将当前时间的通道后至少持续时间D.

fmt.Println(time.Now().Format("2006-01-02 15:04:05")) // 2018-04-24 10:11:20
 fmt.Println(time.Now().Format(time.UnixDate))  // Tue Apr 24 09:59:02 CST 2018

func Parse(layout, value string) (Time, error)

将字符窜转换为Time类型.

layout := ""2006-01-02 15:04:05.999999""t, _ := time.Parse(layout, "2013-10-05 18:30:50")fmt.Println// 当前时区时间格式化转换strTime := "2018-03-24T20:01:00 08:00"tim, _:=time.ParseInLocation("2006-01-02T15:04:05 08:00", strTime, time.Local)

Format 函数中可以指定你想使用的格式,同时 time 包中也给了一些我们常用的格式

func ParseDuration (Duration, error)

将字duration符窜("ns", "us" , "ms", "s", "m", "h".)转换为Duration类型.就是纳秒

t, _ := time.ParseDurationfmt.Println(t.Seconds
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"
)

func ParseInLocation(layout, value string, loc *Location) (Time, error)

parseinlocation像解析,但在两个重要方面不同。首先,在时区信息的情况下,分析解释时间UTC;parseinlocation解释时间在给定的位置。其次,当给定一个带偏移或缩写,解析试图匹配与局部的位置;parseinlocation使用给定的位置。

注意: galang 中指定的 特定时间格式 为 "2006-01-02 15:04:05 -0700 MST" , 为了记忆方便,按照美式时间格式 月日时分秒年 外加时区 排列起来依次 是 01/02 03:04:05PM ‘06 -0700 ,刚开始使用时需要注意。

func NewTicker(d Duration) *Ticker

创建一个新的Ticker

to time stamp

func Tick(d Duration) <-chan Time

返回一个time.C这个管道,d后会在此管道中放入一个时间点(time.Now

func (t Time) Unix() int64
 func (t Time) UnixNano() int64

 fmt.Println(time.Now().Unix())

 // 获取指定日期的时间戳
 dt, _ := time.Parse("2016-01-02 15:04:05", "2018-04-23 12:24:51")
 fmt.Println(dt.Unix())

 fmt.Println(time.Date(2018, 1,2,15,30,10,0, time.Local).Unix())

func Date(year int, month Month, day, hour, min, sec, nsec int, loc *Location) Time

设置年月日返回,Time类型

其他

LoadLocation(name string) (*Location, error)

给定名称返回位置

time 包还提供了一些常用的方法,基本覆盖了大多数业务,从方法名就能知道代表的含义就不一一说明了。

func FixedZone(name string, offset int) *Location

给定名称和偏移量返回位置

func (t Time) Date() (year int, month Month, day int)
 func (t Time) Clock() (hour, min, sec int)
 func (t Time) Year() int
 func (t Time) Month() Month
 func (t Time) Day() int
 func (t Time) Hour() int
 func (t Time) Minute() int
 func (t Time) Second() int
 func (t Time) Nanosecond() int
 func (t Time) YearDay() int
 func (t Time) Weekday() Weekday
 func (t Time) ISOWeek() (year, week int)
 func (t Time) IsZero() bool
 func (t Time) Local() Time
 func (t Time) Location() *Location
 func (t Time) Zone() (name string, offset int)
 func (t Time) Unix() int64

时间段(Duartion)

After bool

时间类型比较,是否在Time之后

介绍完了时间点,我们再来介绍时间段,即 Duartion 类型, 我们业务也是很常用的类型。

Before bool

时间类型比较,是否在Time之前

// func ParseDuration(s string) (Duration, error)
 tp, _ := time.ParseDuration("1.5s")
 fmt.Println(tp.Truncate(1000), tp.Seconds(), tp.Nanoseconds())

 func (d Duration) Hours() float64
 func (d Duration) Minutes() float64
 func (d Duration) Seconds() float64
 func (d Duration) Nanoseconds() int64
 func (d Duration) Round(m Duration) Duration  // 四舍五入
 func (d Duration) Truncate(m Duration) Duration // 向下取整

Equal bool

比较两个时间是否相等

3522.com,时区(Location)

IsZero() bool

判断时间是否为零值,如果sec和nsec两个属性都是0的话,则该时间类型为0

我们在来介绍一下时区的相关的函数

Date() (year int, month Month, day int)

返回年月日,三个参数

本文由3522.com发布于计算机教程,转载请注明出处:golang package time的用法具体详解

关键词: 3522.com