// 獲取當前時間 t := time.Now() // 2020-05-13 22:23:56.253851 +0800 CST m=+0.001626130 fmt.Println(t) //獲取當前年月日,時分秒 y := t.Year() //年 m := t.Month() //月 d := t.Day() //日 h := t.Hour() //小時 i := t.Minute() //分鐘 s := t.Second() //秒 fmt.Println(y, m, d, h, i, s) // 2020 May 13 22 41 20 // 獲取當前時間戳 (int64 數字) timestamp := t.Unix() // 1589379836 fmt.Println(timestamp) // 時間 -> 字符串,注意,格式化字符串 2006-01-02 15:04:05 fmt.Println(t.Format("2006-01-02 15:04:05")) // 2020-05-13 22:23:56 // 字符串時間 ->時間戳(帶時區) loc, _ := time.LoadLocation("Asia/Shanghai") //設置時區 tt, _ := time.ParseInLocation("2006-01-02 15:04:05", "2020-05-13 22:23:56", loc) //2006-01-02 15:04:05是轉換的格式 fmt.Println(tt.Unix()) // 1589379836 // 字符串時間 ->時間戳(不帶時區) ttt, _ := time.Parse("2006-01-02 15:04:05", "2020-05-13 22:23:56") fmt.Println(ttt.Format("2006-01-02 15:04:05")) // 時間戳 -> 時間 tm := time.Unix(1531293019, 0) fmt.Println(tm.Format("2006-01-02 15:04:05")) //2018-07-11 15:10:19
start := time.Now() time.Sleep(2 * time.Second) t := time.Now() elapsed := t.Sub(start) fmt.Println(elapsed) // 2.002571917s fmt.Println(elapsed.Seconds()) // 2.000620669 (float64類型),還能夠轉換成 hours / minutes 等 // Since is shorthand for time.Now().Sub(t). fmt.Println(time.Since(start)) // 2.002534752s
// 使用 Ticker // 定時器,週期性觸發 ticker := time.NewTicker(time.Second) defer ticker.Stop() done := make(chan bool) go func() { time.Sleep(10 * time.Second) done <- true }() for { select { case <-done: fmt.Println("Done!") return case t := <-ticker.C: fmt.Println("Current time: ", t) } } // 使用 Timer // 定時器,一次觸發 goon := true timer := time.NewTimer(2 * time.Second) // 防止內存泄漏,不用 stop 關閉,stop 不會關閉 channel defer timer.Reset(0) go func() { <-timer.C goon = false }() for goon { fmt.Println("loop") time.Sleep(time.Second) }
更多使用技巧參考 godoc https://www.godoc.org/timeoop