Go语言基础(11)-- time标准包

十一、time标准包

time包提供了时间的显示和测量用的函数。8历的计算采用的是公历。

11.1、时间类型

time.Time类型表示时间。我们可以通过time.Now()函数获取当前的时间对象,然后获取时间对象的年月日时分秒等信息。示例代码如下:

func main() {
  now := time.Now()      //获取系统时间
  fmt.Println("现在的时间是:", now) 
  //现在的时间是: 2021-08-04 18:02:52.864717 +0800 CST m=+0.002099601
  year := now.Year()
  month := now.Month()
  day := now.Day()
  hour := now.Hour()
  minute := now.Minute()
  second := now.Second()
  fmt.Printf("现在是:%d年%d月%d日%d时%d分%d秒", year, month, day, hour, minute, second)
  //现在是:2021年8月4日18时5分26秒
}

11.2、时间戳

使用time.Unix()函数可以将时间战转为时间格式。

func main() {
  now := time.Now() //获取系统时间
  fmt.Println("现在的时间是:", now)
  //现在的时间是: 2021-08-04 18:14:22.4631104 +0800 CST m=+0.002645001
  fmt.Println(now.Unix())   //时间戳 1628072062 秒
  fmt.Println(now.UnixNano()) //时间戳 1628072062463110400  纳秒
  now2 := time.Unix(now.Unix(), 0)
  fmt.Println(now2) //2021-08-04 18:14:22 +0800 CST
}

11.3、时间间隔

Duration类型代表两个时间点之间经过的时间,以纳秒为单位。可表示的最长时间段大约290年。

例如:time.Duration表示1纳秒,time.Second表示1秒。

const (
  Nanosecond  Duration = 1
  Microsecond     = 1000 * Nanosecond
  Millisecond      = 1000 * Microsecond
  Second        = 1000 * Millisecond
  Minute        = 60 * Second
  Hour         = 60 * Minute
}

11.4、时间操作

11.4.1、添加Add

日常的编码过程中可能会遇到要求时间+时间间隔的需求,Go语言的时间对象有提供Add方法。

func main() {
  now := time.Now() //获取系统时间
  fmt.Println("现在的时间是:", now)
  //现在的时间是: 2021-08-04 18:25:46.0697561 +0800 CST m=+0.002079701
  next := now.Add(time.**Hour** * 2)
  fmt.Println("两个小时后的时间是:",next)
  //两个小时后的时间是: 2021-08-04 20:25:46.0697561 +0800 CST m=+7200.002079701
}

14.4.2、时间差值Sub

func (t Time) Sub(u Time) Duration {
}

求两个时间之间的差值,返回一个时间段t-u。如果结果超出了Duration可以表示的最大值/最小值,将返回最大值/最小值。要获取时间点t-d (d为Duration),可以使用t,Add(-d)func main() {
  parse, err := time.Parse("2006-01-02 15:04:05.000", "2021-08-04 18:52:17.723")
  if err == nil {
   r := time.Now().UTC()
   fmt.Println(r)//2021-08-04 11:29:17.9214356 +0000 UTC
   fmt.Println(parse)//2021-08-04 18:52:17.723 +0000 UTC
   parse = parse.UTC()
   duration := r.Sub(parse)
   fmt.Println(duration)//-7h22m59.8015644s
  }else {
   fmt.Println("时间转换错误:",err)//2021-08-04 18:52:17.723 +0000 UTC
  }
}

14.4.3、时间是否相等Equal

func (t Time) Equal(u Time) bool

判断两个时间是否相同,会考虑时区的影响,因此不同时区标准的时间也可以正确比较。本方法和用t==u不同,这种方法还会比较地点和时区信息,

14.4.4、时间是否在前Before

func (t Time) Before(u Time) bool

如果t代表的时间点在u之前,返回真;否则返回假。

14.4.5、时间是否在后After

func (t Time) After(u Time) bool

如果t代表的时间点在u之后,返回真;否则返回假。

14.4.6、定时器

使用time.Tick(时间间隔)来设置定时器,定时器的本质上是一个通道(channel)

func main() {
  ticker := time.Tick(time.**Second**) //定义一个1秒 间隔的定时器
  for i := range ticker {
   fmt.Println(i) //每秒都会执行的任务
  }
}

在这里插入图片描述

14.4.7、时间格式化

时间类型有一个自带的方法Format 进行格式化,需要注意的是Go语言中格式化时间模板不是常见的Y-m-d H:M:S而是使用Go的诞生时间2006年1月2号15点04分05.000秒(记忆口诀为200612345)。如果想格式化为12小时方式,需指定PM

func main() {
  now := time.Now()
  //格式化的模板为 Go的出生时间2086年1月2号15点04分05秒 Mon Jan
  fmt.Println(now.Format("2006-01-02 15:04:05.000 Mon Jan"))  //24小时制 2021-08-04 18:44:36.413 Wed Aug
  fmt.Println(now.Format("2006-01-02 03:04:05.000 Mon Jan"))  //12小时制 2021-08-04 06:44:36.413 Wed Aug
  fmt.Println(now.Format("2006年01月02日 15时04分05.000秒 Mon Jan")) //2021年08月04日 18时44分36.413秒 Wed Aug
  fmt.Println(now.Format("2006/01/02"))  //2021/08/04
  fmt.Println(now.Format("03:04:05.000"))  //06:44:36.413
  fmt.Println(now.Format("2006-01-02 03:04:05.000"))  //2021-08-04 06:44:36.413
}

14.4.8、把字符串转换成时间戳

func main() {
  parse, err := time.Parse("2006-01-02 15:04:05.000", "2021-08-04 18:52:17.723")
  if err == nil {
   fmt.Println(parse)
  }else {
   fmt.Println("时间转换错误:",err)//2021-08-04 18:52:17.723 +0000 UTC
  }
}

14.5、sleep()

func main() {
  time.Sleep(1000)
  fmt.Println("hello")
  n := 1000
  time.Sleep(time.Duration(n))
  fmt.Println("world")
}

14.6、时区相关

func main() {
  now := time.Now() //本地的时间
  fmt.Println(now)//2021-08-04 19:54:21.8713356 +0800 CST m=+0.002121301
  //明天的这个时间
  //按照指定格式取解析一个字符串格式的时间
  parse, err2 := time.Parse("2006-01-02 15:04:05", "2021-08-04 14:41:50")
  if err2 == nil {
   fmt.Println("解析时间是:", parse)//解析时间是: 2021-08-04 14:41:50 +0000 UTC
  } else {
   fmt.Println("时间解析失败:",err2)
  }
  //按照东八区的时区和格式取解析一个字符串格式的时间
  //根据字符串加载时区
  loc, err := time.LoadLocation("Asia/Shanghai")
  if err == nil {
   fmt.Println("本地时区是:", loc)//本地时区是: Asia/Shanghai
  } else {
   fmt.Println("时区转换失败:",err)
  }
  parse, err2 = time.ParseInLocation("2006-01-02 15:04:05", "2019-08-04 14:41:50", loc)
  if err2 == nil {
   fmt.Println("解析本地时间是:", parse)//解析本地时间是: 2019-08-04 14:41:50 +0800 CST
  } else {
   fmt.Println("本地时间解析失败:",err2)
  }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值