Go语言标准库之时间处理 - Time

silverwq
2022-07-04 / 0 评论 / 252 阅读 / 正在检测是否收录...

如何获取当前时间信息?

获取当前时间对象信息

now := time.Now() //获取当前时间

通过时间戳解析成时间对象

timeObj := time.Unix(1669449581, 0) 

通过时间文本解析成时间对象

// 加载时区
loc, err := time.LoadLocation("Asia/Shanghai")
if err != nil {
    fmt.Println(err)
    return
}
// 按照指定时区和指定格式解析字符串时间,如果不需要指定时区的话直接用Parse()
timeObj, err := time.ParseInLocation("2006/01/02 15:04:05", "2019/08/04 14:15:20", loc)
if err != nil {
    fmt.Println(err)
    return
}

时间对象的一些常用的方法?

获取当前时间对象上的年月日

// 年月日信息
year := now.Year() //2022
month := now.Month() //July,输出了英文
day := now.Day() //28
hour := now.Hour() //17
minute := now.Minute() //1,没有占位
second := now.Second() //5,没有占位

获取时间对象上的时间戳

// 时间戳信息
timestamp1 := now.Unix()     //时间戳
timestamp2 := now.UnixNano() //纳秒时间戳

时间对象格式化输出

// 格式化输出
fmt.Println(now.Format("2006-01-02 15:04:05"))  // 24小时制 2022-11-26 15:59:41
fmt.Println(now.Format("2006年01月02 15点04分05秒")) // 24小时制 2022年11月26 15点59分41秒
fmt.Println(now.Format("2006-01-02 03:04:05"))  // 12小时制 2022-11-26 03:59:41

如何阻塞延迟?

主要是用 time 包的 Sleep 方法

time.Sleep(time.Millisecond * 1000)
time.Sleep(time.Second)

如何输出两个时间的间隔?

可以通过 since 方法来实现

start := time.Now()
time.Sleep(time.Second * 2)
end := time.Since(start)
fmt.Println("耗时:", end.String()) // 输出2s

还可以通过 sub 方法计算两个时间的间隔

now := time.Now()
later := now.Add(time.Hour) // 当前时间加1小时后的时间

before := later.Sub(now)
fmt.Println(before) // 1h0m0s

如何对时间进行加减?

使用 time 包的 Add 方法,可以增加制定时间,并且返回新的时间对象

timeObj := time.Now()
later := timeObj.Add(time.Hour)
fmt.Println(later.Format("2006-01-02 15:04:05"))

如何实现定时器操作?

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

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

获取当地时间

ime.Now().Local()

时间的其他操作?

  1. 判断两个时间对象是否相等 Equal 方法
  2. 判断一个时间是否在另外一个时间之前 before 方法
  3. 判断一个时间是否在另外一个时间之后 after 方法

如何构造时间

startTime := time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, now.Location())
0

评论 (0)

取消