我们在php中对于时间操作主要是用时间戳和时间格式相互转换来计算,一般都是用时间戳进行计算,用时间格式进行展示,相对来说还是比较方便的。在golang中是有些区别的,主要是多了一个time对象,接下来我们来看一看
在golang中,我们常用time.Now()来获取当前的时间
now := time.Now() //时间对象 fmt.Println(now) ****************** 打印结果 2020-07-07 11:12:48.795021 +0800 CST m=+0.000757041
而且我们可以根据时间对象获取当前的年月日时分秒
year := now.Year() month := now.Month() day := now.Day() hour := now.Hour() minute := now.Minute() second := now.Second() fmt.Println(year, month, day, hour, minute , second) fmt.Printf("%d-%d-%d %d:%d:%d\n", now.Year(), now.Month(), now.Day(), now.Hour(), now.Minute(), now.Second()) ************************** 打印结果 2020 July 7 16 56 45 2020-7-7 16:56:45
获取当前时间戳(毫秒和纳秒)
timestamp1 := now.Unix() timestamp2 := now.UnixNano() //纳秒 fmt.Println(timestamp1, timestamp2) ***************** 打印结果 1594091568 1594091568795021000
把指定的时间戳转换为时间对象
t := time.Unix(1593654704, 0) //第二个参数为纳秒,一般都写0 fmt.Println(t) *********** 打印结果 2020-07-02 09:51:44 +0800 CST
在咱们了解时间格式化之前,一定要记住这个时间 2006-01-02 15:04:05 这个时间据说是golang的上线时间,所有时间都依据于这个 其实也很好记 2006年 12345 3是24小时制的 就可以了
timeFormat := now.Format("2006.01.02::15.04.05") timeFormat2 := now.Format("2006.01.02::03.04.05 PM") fmt.Println(timeFormat) fmt.Println(timeFormat2) *********输出结果 2020.07.07::14.42.37 2020.07.07::02.42.37 PM
timeStr :="2020/07/02 14:00:00" loc, err := time.LoadLocation("Asia/Shanghai") if err != nil{ fmt.Println("err:", err) return } timeObj1, err := time.Parse("2006/01/02 15:04:05", timeStr) if err != nil{ fmt.Println("err :", err) return } timeObj2, err := time.ParseInLocation("2006/01/02 15:04:05", timeStr, loc) if err != nil{ fmt.Println("err :", err) return } fmt.Println(timeObj1) fmt.Println(timeObj2) *******输出 2020-07-02 14:00:00 +0000 UTC 2020-07-02 14:00:00 +0800 CST
n := time.Duration(2) time.Sleep(n*time.Second)
时间加减操作
now := time.Now() // 当前 datetime时间 tomorrow := now.AddDate(0, 0, +1) // 一天之后的时间 三个参数分别为 年 月 日 fmt.Println(tomorrow) day_after_15 := now.AddDate(0, 0, -15) // 15天之前的时间 fmt.Println(day_after_15) **********输出结果 2020-07-08 17:31:56.433365 +0800 CST 2020-06-22 17:31:56.433365 +0800 CST
now := time.Now() // 当前 datetime时间 // 10分钟前 m, _ := time.ParseDuration("-10m") m1 := now.Add(m) fmt.Println(m1) // 8个小时前 h, _ := time.ParseDuration("-1h") h1 := now.Add(8 * h) fmt.Println(h1) // 一天前 d, _ := time.ParseDuration("-24h") d1 := now.Add(d) fmt.Println(d1) subM := now.Sub(m1) fmt.Println(subM.Minutes(), "分钟") sumH := now.Sub(h1) fmt.Println(sumH.Hours(), "小时") sumD := now.Sub(d1) fmt.Printf("%v 天\n", sumD.Hours()/24) ************输出结果 2020-07-07 17:58:55.322775 +0800 CST m=+0.000879113 2020-07-07 17:48:57.325396 +0800 CST m=-597.996547788 2020-07-07 09:58:57.325396 +0800 CST m=-28797.996547788 2020-07-06 17:58:57.325396 +0800 CST m=-86397.996547788 10 分钟 8 小时 1 天
在php中我们一般可以直接转换,golang中需要先把各自转换为时间对象,然后再转换成对应的类型
// 获取当前时间,进行格式化 fmt.Println(time.Now().Format("2006-01-02 15:04:05")) // output: 2016-07-27 08:57:46 // 时间戳转换为时间格式 方法1: 先把时间转换为时间对象 time.Unix(1469579899, 0) 然后再Format成时间格式 fmt.Println(time.Unix(1469579899, 0).Format("2006-01-02 15:04:05")) // output: 2016-07-27 08:38:19 方法2: // 获取指定时间戳的年月日,小时分钟秒 t := time.Unix(1469579899, 0) fmt.Printf("%d-%d-%d %d:%d:%d\n", t.Year(), t.Month(), t.Day(), t.Hour(), t.Minute(), t.Second()) // output: 2016-7-27 8:38:19
// 先用time.Parse对时间字符串进行分析,如果正确会得到一个time.Time对象 // 后面就可以用time.Time对象的函数Unix进行获取 t2, err := time.Parse("2006-01-02 15:04:05", "2016-07-27 08:46:15") if err != nil { log.Fatalln(err) } fmt.Println(t2) fmt.Println(t2.Unix()) // output: // 2016-07-27 08:46:15 +0000 UTC // 1469609175
本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。
我来说两句