时区

// 代表一个纳秒精度的时间点

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...");

}

}

参考:

声明:本网站所提供的信息仅供参考之用,并不代表本网站赞同其观点,也不代表本网站对其真实性负责。