go语言@time包

190 阅读2分钟

package main

import ( "fmt" "time" )

func main() { //---------------time.Time类型--------------------- now := time.Now() fmt.Println(now) //2020-04-23 08:38:45.7008634 +0800 CST m=+0.006981701 //提取年月日时分秒 year := now.Year() month := now.Month() day := now.Day() hour := now.Hour() minute := now.Minute() second := now.Second() fmt.Printf("%d,%02d,%02d %02d:%02d:%02d\n", year, month, day, hour, minute, second) //2020,04,23 08:42:25

//---------------time.Time格式化---------------------
//Go语言中格式化时间模板不是常见的Y-m-d H:M:S而是使用Go的诞生时间2006年1月2号15点04分(记忆口诀为2006 1 2 3 4 5)。
fmt.Println(now.Format("2006-01-02 15:04:05")) //2020-04-23 08:44:11
fmt.Println(now.Format("2006/01/02 15:04"))    //2020/04/23 08:44
fmt.Println(now.Format("15:04 2006/01/02"))    //08:44 2020/04/23
fmt.Println(now.Format("2006/01/02"))          //2020/04/23

//-----------------time时间戳------------------------ //时间戳是自1970年1月1日(08:00:00GMT)至当前时间的总毫秒数。它也被称为Unix时间戳(UnixTimestamp)。 //时间格式转为时间戳 timestamp := now.Unix() fmt.Println(timestamp) //1587602870 //时间戳转为时间格式 timeobj := time.Unix(timestamp, 0) fmt.Println(timeobj) //2020-04-23 08:49:17 +0800 CST

//------------------时间间隔------------------------- //Duration类型代表两个时间点之间经过的时间,以纳秒为单位。 //时间加时间间隔 //函数: //func (t Time) Add(d Duration) Time //示例:计算1小时后及1小时前时间 later := now.Add(time.Hour) fmt.Println(later) //2020-04-23 10:06:12.3903823 +0800 CST m=+3600.007983601 before := now.Add(-time.Hour) fmt.Println(before) //2020-04-23 08:06:12.3903823 +0800 CST m=-3599.992016399

//--------------time.Tick定时器---------------------- //time.Tick(时间间隔)来设置定时器。 //定时器,每隔1s打印当前时间 ticker := time.Tick(time.Second) js := 0 for i := range ticker { fmt.Println(i) js++ if js == 4 { //跳出计时器 break } }

//--------------time.Sleep睡眠---------------------- //time.Sleep(时间间隔)来设置睡眠 //示例:每隔三秒打印一次 for i := 0; i < 3; i++ { fmt.Println(i) time.Sleep(time.Second * 3) }

//----------------时间比较-------------------------- //Equal //判断时间是否相等,会有时区影响。

//func (t Time) Equal(u Time) bool //Before //func (t Time) Before(u Time) bool //如果t代表的时间点在u之前,返回真;否则返回假。

//After //func (t Time) After(u Time) bool //如果t代表的时间点在u之后,返回真;否则返回假。

//----------------字符串转为时间格式-------------------- formatTimeStr := "2017-04-11 13:33:37" formatTime, err := time.Parse("2006-01-02 15:04:05", formatTimeStr) if err == nil { fmt.Println(formatTime) //2017-04-11 13:33:37 +0000 UTC }

//----------------时间间隔计算--------------------------

timestamp1 := formatTime.Unix() time1 := time.Unix(timestamp1, 0) timeval := now.Sub(time1) fmt.Println(timeval) //不固定值:26580h3m9.9829024s fmt.Println(int(timeval.Hours() / 24)) //1107

}