package main; import ( "time" "fmt" ) func main() { //time.Time表明一個納秒精度的時間點 var t time.Time; //返回當前時間 t = time.Now(); fmt.Printf("%v\n", t); //反回所在時區 fmt.Printf("%v\n", t.Location()); //返回UTC時間和UTC時區 fmt.Printf("%v %v\n", t.UTC(), t.UTC().Location()); //同上,In()返回指定時區的時間 fmt.Printf("%v %v\n", t.In(time.UTC), t.In(time.UTC).Location()); //返回當地時區的時間 fmt.Printf("%v %v\n", t.Local(), t.Local().Location()); //根據時間戳返回本地時間 //參數分別表示秒數和納秒數 t2 := time.Unix(1487780010, 0); fmt.Println(t2); //根據指定時間返回time.Time //分別指定年,月,日,時,分,秒,納秒,時區 t3 := time.Date(2017, time.Month(5), 26, 15, 30, 20, 0, t.Location()); fmt.Println(t3); //格式化輸出時間 t4 := time.Now(); fmt.Println(t4.Format("2006-01-02 15:04:05")); //獲取時間信息 t5 := time.Now(); //返回日期 fmt.Println(t5.Date()); //返回年 fmt.Println(t5.Year()); //返回月 fmt.Println(t5.Month()); //返回日 fmt.Println(t5.Day()); //返回星期 fmt.Println(t5.Weekday()); //返回ISO 9601標準下的年份和星期編號 fmt.Println(t5.ISOWeek()); //返回時分秒 fmt.Println(t5.Clock()); //返回小時 fmt.Println(t5.Hour()); //返回分鐘 fmt.Println(t5.Minute()); //返回秒 fmt.Println(t5.Second()); //返回納秒 fmt.Println(t5.Nanosecond()); //返回一年中對應的天 fmt.Println(t5.YearDay()); //返回時區 fmt.Println(t5.Location()); //返回時區的規範名,時區相對於UTC的時間偏移量(秒) fmt.Println(t5.Zone()); //返回時間戳 fmt.Println(t5.Unix()); //返回納秒時間戳 fmt.Println(t5.UnixNano()); //時間的比較與計算 t6 := time.Now(); //是否零時時間 fmt.Println(t6.IsZero()); //t6時間在t5時間以後,返回真 fmt.Println(t6.After(t5)); //t5時間在t6時間以前,返回真 fmt.Println(t5.Before(t6)); //時間是否相同 fmt.Println(t6.Equal(t6)); //返回t6加上納秒的時間 fmt.Println(t6.Add(10000)); //返回兩個時間之差的納秒數 fmt.Println(t6.Sub(t5)); //返回t6加1年,1月,1天的時間 fmt.Println(t6.AddDate(1, 1, 1)); //時間的序列化 t7 := time.Now(); //序列化二進制 bin, _ := t7.MarshalBinary(); //反序列化二進制 t7.UnmarshalBinary(bin) fmt.Println(t7); //序列化json json, _ := t7.MarshalJSON(); fmt.Println(string(json)); //反序列化json t7.UnmarshalJSON(json); fmt.Println(t7); //序列化文本 txt, _ := t7.MarshalText(); fmt.Println(string(txt)); //反序列化文本 t7.UnmarshalText(txt); fmt.Println(t7); //gob編碼 gob, _ := t7.GobEncode(); t7.GobDecode(gob); fmt.Println(t7); //時間段time.Duration dur := time.Duration(6666666600000); //返回字符串表示 fmt.Println(dur.String()); //返回小時表示 fmt.Println(dur.Hours()); //返回分鐘表示 fmt.Println(dur.Minutes()); //返回秒錶示 fmt.Println(dur.Seconds()); //返回納秒錶示 fmt.Println(dur.Nanoseconds()); //時區time.Location //返回時區名 fmt.Println(time.Local.String()); //經過地點名和時間偏移量返回時區 fmt.Println(time.FixedZone("Shanghai", 800)); //經過給定時區名稱,返回時區 loc, _ := time.LoadLocation("Asia/Shanghai"); fmt.Println(loc); //阻塞當前進程3秒 time.Sleep(time.Second * 3); //定時器time.Timer //建立一個1秒後觸發定時器 timer1 := time.NewTimer(time.Second * 1); <-timer1.C; fmt.Println("timer1 end"); //1秒後運行函數 time.AfterFunc(time.Second * 1, func() { fmt.Println("wait 1 second"); }); time.Sleep(time.Second * 3); //打點器time.Ticker //建立一個打點器,在固定1秒內重複執行 ticker := time.NewTicker(time.Second); num := 1; for { if num > 5 { //大於5次關閉打點器 ticker.Stop(); break; } //不然從打點器中獲取chan select { case <-ticker.C: num++; fmt.Println("1 second..."); } } }