go語言time包的學習(Time,Location,Duration,Timer,Ticker)

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...");
        }
    }
}
相關文章
相關標籤/搜索