time.Now()
time.Now().Format("2006-01-02 15:04:05")
time.Parse("01-02-2006", "06-17-2013")
time.Unix(timestamp, 0).Format("2006-01-02 15:04:05")
time.Now().UnixNano()
time.Date()
(看下面)time.Now().Truncate(時間)
layout := "2006-01-02 15:04:05" str := "2016-07-25 11:45:26" t, err := time.Parse(layout, str) if err != nil { fmt.Println(err) } fmt.Println(t)
//普通unix時間轉換 func(timestamp int64) string { tm := time.Unix(timestamp, 0) return tm.Format("2006-01-02 15:04:05") } // nano 納秒轉換 func(timestamp float64, nsec int64) string { //納秒沒什麼用 前段不顯示 直接將小數捨棄轉化爲int64 tm := time.Unix(int64(timestamp), nsec) return tm.Format("2006-01-02 15:04:05") },
timeEnd := time.Date(timeNow.Year(), timeNow.Month(), timeNow.Day(), 23, 59, 59, 0, time.Local)
type Duration int64 表示一個持續的時間,單位是納秒函數
package main import ( "fmt" "time" ) func main() { t := time.Now() t2 := t.Add(24 * time.Hour) //當前時間加24小時,即明天的這個時間 d := t2.Sub(t) fmt.Println(t) fmt.Println(t2) fmt.Println(d) if t.Before(t2) { //t 小 t2 fmt.Println("t<t2") } if t2.After(t) { //t2大於 t fmt.Println("t2>t") //t2-t1,相差24小時 } if t.Equal(t) { //判斷兩個時間是否相等等 fmt.Println("t=t") } }
Go 裏的定時器相關的函數有 time.After,time.AfterFunc,time.Tick 等unix
1.func After(d Duration) <-chan Time 等待一個時間段 d,而後把當前時間發送到 channel 中。與 NewTimer 等價code
package main import ( "fmt" "time" ) func main() { fmt.Println(time.Now()) c := time.After(10 * time.Second) //返回 channel 類型,10秒後向 channel 發送當前時間 t := <-c fmt.Println(t) tm := time.NewTimer(10 * time.Second) //NewTimer 返回 Timer 類型 t = <-tm.C /*Timer 結構中有一個 channel C,10秒後,把當前時間發送到 C*/ fmt.Println(t) }
2.func AfterFunc(d Duration, f func()) *Timer,等待時間 d,而後調用函數 f。注意這裏的 函數 f 是不帶任何參數和返回值的orm
package main import ( "fmt" "time" ) func Test() { fmt.Println("Hello world!", time.Now()) } func main() { fmt.Println(time.Now()) time.AfterFunc(10 * time.Second, Test) var str string fmt.Scan(&str) /*這裏主要是等待用戶輸入,不讓進程結束,進程結束定時器也就無效了。*/ }
3.Tick 與 After 有點相似,惟的區別是 After 等待時間到期後,定時器就結束了。Tick 是 每隔一段時間 d 都會向 channel 發送當前時間。進程
package main import ( "fmt" "time" ) func main() { c := time.Tick(10 * time.Second) for t := range c { fmt.Println(t) } }