时区
// 代表一个 纳秒 精度的时间点
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());
// 返回时区名
fmt.Println(time.Local.String());
// 通过地点名和时间偏移量返回时区
fmt.Println(time.FixedZone("Shanghai", 800));
// 通过给定时区名称,返回时区
loc, _ := time.LoadLocation("Asia/Shanghai");
fmt.Println(loc);
时间格式化
// 根据时间戳返回本地时间 // 参数分别表示秒数和纳秒数 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()); // 返回月(string) /* const ( January Month = 1 + iota February March April May June July August September October November December ) */fmt.Println(t5.Month()); // 返回日 fmt.Println(t5.Day()); // 返回星期(string) /* const ( Sunday Weekday = iota Monday Tuesday Wednesday Thursday Friday Saturday ) */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());
进程阻塞
// 阻塞当前进程3秒
time.Sleep(time.Second * 3);
一次性定时器
// 创建一个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);
周期性定时器
// 固定5秒内重复执行 ticker := time.NewTicker(5 * time.Second); num := 1; for { if num > 5 { // 大于5次关闭 ticker.Stop(); break; } //否则获取chan select { case <-ticker.C: num++; fmt.Println(strconv.Itoa(num) + "second..."); } }