• golang中time包的使用


    一、代码

    package main;
     
    import (
        "time"
        "fmt"
    )
     
    func main() {
        //time.Time代表一个纳秒精度的时间点
        var t time.Time;
        //返回当前时间
        t = time.Now();
        fmt.Printf("%v
    ", t);
        //反回所在时区
        fmt.Printf("%v
    ", t.Location());
        //返回UTC时间和UTC时区
        fmt.Printf("%v %v
    ", t.UTC(), t.UTC().Location());
        //同上,In()返回指定时区的时间
        fmt.Printf("%v %v
    ", t.In(time.UTC), t.In(time.UTC).Location());
        //返回当地时区的时间
        fmt.Printf("%v %v
    ", 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...");
            }
        }
    }
    #补充代码
    now := time.Now()
    // 10分钟前
    m, _ := time.ParseDuration("-1m")
    m1 := now.Add(m)
    fmt.Println(m1)
    
    // 8个小时前
    h, _ := time.ParseDuration("-1h")
    h1 := now.Add(8 * h)
    fmt.Println(h1)
    
    // 一天前
    d, _ := time.ParseDuration("-24h")
    d1 := now.Add(d)
    fmt.Println(d1)
    
    // 10分钟后
    mm, _ := time.ParseDuration("1m")
    mm1 := now.Add(mm)
    fmt.Println(mm1)
    
    // 8小时后
    hh, _ := time.ParseDuration("1h")
    hh1 := now.Add(hh)
    fmt.Println(hh1)
    
    // 一天后
    dd, _ := time.ParseDuration("24h")
    dd1 := now.Add(dd)
    fmt.Println(dd1)
  • 相关阅读:
    职场篇:聚焦与复盘
    职场篇:直面情绪杀手【已补更】
    .NetCore实践篇:成功解决分布式监控ZipKin聚合依赖问题(三)
    职场篇:为何我们需要思想大洗礼?
    职场篇:从温水煮青蛙说起
    .NetCore实践篇:分布式监控系统zipkin踩坑之路(二)
    postman application/json;
    yapi 个人空间 这个分组的问题
    yapi 的分组的理解!
    yapi的安装
  • 原文地址:https://www.cnblogs.com/angelyan/p/11104610.html
Copyright © 2020-2023  润新知