15.Go语言干货-time包

本文详细介绍了Go语言中的时间类型、时间对象操作、时间戳转换、时间间隔处理、定时器和格式化,包括年月日时分秒提取、Unix时间戳、时间加减、相等判断,以及如何使用time.Tick创建定时任务和定制时间格式。
摘要由CSDN通过智能技术生成

1.时间类型

Go语言语言中时间类型为:time.Time

我们可以使用 time.Now() 获取当前的时间对象

func main() {
	nowtimeObj := time.Now()
	fmt.Printf("当前时间对象:%v \n",nowtime)
}
`当前时间对象:2021-06-22 16:39:06.388243 +0800 CST m=+0.005000301`

获取当前年、月、日、时、分、秒

	year := nowtimeObj.Year()
	month := nowtimeObj.Month()
	day := nowtimeObj.Day()
	hour := nowtimeObj.Hour()
	minute := nowtimeObj.Minute()
	second := nowtimeObj.Second()

2. 时间戳

从1970年1月1日开始算起的总毫秒数。

2.1 时间对象转时间戳

时间对象.Unix()

	timestamp1 := nowtimeObj.Unix() // 当前时间戳
	timestamp2 := nowtimeObj.UnixNano() // 当前时间纳秒时间戳

2.2 时间戳转时间对象

使用time.Unix(),调用time下的Unix方法,将时间戳转换为时间对象

func stampTotimeObj(timestamp int64) {
    timeObj := time.Unix(timestamp,0) // 将时间戳转为时间对象
    
    year := timeObj.Year() //年
    ....
}

3.时间间隔(时间单位)

Go语言中定义了一些列的常量,这些常量存储了,在平时生活中常用的时间间隔(时间单位)。

比如:一小时、一分钟、一秒钟等等

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

想要使用这些常量直接使用time.字段名就可以,比如:使用time.Second

在代码中演示time.Second

package main

import (
	"fmt"
	"time"
)

func main() {
	t := time.Second
	fmt.Printf("%T,%v", t, t)
}
`time.Duration,1s`
  1. 我们发现time.Second的类型是time.Duration

4.时间操作

4.1 Add

在编程工作中有时候会遇到,某个程序时间延迟一段时间之后再执行

某个时间+间隔时间,Go语言的时间对象提供了Add方法

func (t Time) Add(d Duration) Time {}

举个栗子:打印当前时间,延迟一个小时后的时间

func main(){
    nowTimeObj := time.Now()
    laterTime := nowTimeObj.Add(time.Hour) // 当前时间加上一个小时
}

4.2 Sub

求两个时间的差值

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

举个栗子:

	time1 := time.Unix(1624377000,0)
	time2 := time.Unix(1624377259,0)
	dT := time1.Sub(time2)
	fmt.Println(dT)

	`-4m19s`

4.3 Equal

判断两个时间是否相等,会考虑时区的影响,不同时区的标准时间也可以比较

本方法和用t==u不同,这种方法还会比较地点和时区信息。

func (t Time) Equal(u Time) bool

4.4 Before

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

func (t Time) Before(u Time) bool

4.5 After

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

func (t Time) After(u Time) bool

5.定时器

使用time下的Tick方法来设置定时器:time.Tick(时间间隔)

	ticker := time.Tick(time.Second * 3)
	for i := range ticker {
		fmt.Printf("%T---%v", i, i)
	}
`time.Time---2021-06-23 00:04:18.1234694 +0800 CST m=+3.010116701`

i是时间对象

6.时间格式化

时间类型(时间对象)使用Format进行时间格式化,与python不同的是在Go语言中不使用Y-m-d H:M:S,使用Go的诞生时间2006年1月2号15点04分标示年月日时分秒

举个栗子:

	nowTimeObj := time.Now()
	// 24小时制
	fmt.Println(nowTimeObj.Format("2006-01-02 15:04:05.000"))
	// 12小时制
	fmt.Println(nowTimeObj.Format("2006-01-02 03:04:05.000 PM"))

6.1 按照指定时区,指定格式解析时间

now := time.Now()
// 加载时区
loc, err := time.LoadLocation("Asia/Shanghai")
if err != nil {
	fmt.Println(err)
	return
}
// 按照指定时区和指定格式解析字符串时间
timeObj, err := time.ParseInLocation("2006/01/02 15:04:05", "2019/08/04 14:15:20", loc)
if err != nil {
	fmt.Println(err)
	return
}
fmt.Println(timeObj)
fmt.Println(timeObj.Sub(now))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值