1.1.1. 如下入学下面下面如下如下如下如下基本介绍:

时间和日期相关的函数,是在 time 包中的。文档:https://studygolang.com/pkgdoc。time包的Time 类型(time.Time),用于表示时间。Time代表一个纳秒精度的时间点。

1、获取当前时间:time.Now()。

now := time.Now()
//类型=time.Time,值是=2019-05-02 00:19:27.423362 +0800 CST m=+0.004000301
fmt.Printf("类型=%T,值是=%v",now,now)

2、取出Time的年月日时分秒。

    now := time.Now()
    fmt.Printf("年=%v \n",now.Year()) //年=2019
    fmt.Printf("月=%v \n", int(now.Month())) //月=5
    fmt.Printf("日=%v \n",now.Day()) //日=2
    fmt.Printf("时=%v \n",now.Hour()) //时=0
    fmt.Printf("分=%v \n",now.Minute()) //分=30
    fmt.Printf("秒=%v \n",now.Second()) //秒=2

3、格式化时间和日期。

  • 方式1:就是使用 Printf 或者 SPrintf,格式化字符串。
    now := time.Now()
    result := fmt.Sprintf("当前年月日 %02d-%02d-%02d %02d:%02d:%02d ",
        now.Year(),int(now.Month()),now.Day(),
        now.Hour(),now.Minute(),now.Second())
    //当前年月日 2019-05-02 00:40:30 
    fmt.Println(result)
  • 方式二: 使用 time.Format() 方法。
    now := time.Now()
    //这里:2006/01/02 15:04:05 是固定写法。直接传递这个值就行。
    result := now.Format("2006/01/02 15:04:05")
    fmt.Println(result)// 2019/05/02 00:48:09

    //按照yyyy-mm-dd 输出
    result = now.Format("2006-01-02")
    //2019-05-02
    fmt.Println(result)

    //只获取时分秒
    result = now.Format("15:04:05")
    //00:52:09
    fmt.Println(result)

注意:时间2006/01/02 15:04:05 是固定的时间。这个函数的标准时间。如果想得到年就传递2006,想得到月就传递01,想得到日就传递02。后面依次类推。

4、时间常量。有下面几个时间常量。

const (
    Microsecond          = 1000 * Nanosecond
    Millisecond          = 1000 * Microsecond
    Second               = 1000 * Millisecond
    Minute               = 60 * Second
    Hour                 = 60 * Minute
)

常量的用法:下面的time.Sleep(10 * time.Second) 必须要传递一个time.Duration类型。所以要用到time的常量。

    var t  = 10 * time.Second;

    //类型=time.Duration,值=10s
    fmt.Printf("类型=%T,值=%v \n",t,t)

    // 转换成int之后,其实就是最小单位:10000000000 纳秒
    fmt.Println(int(10 * time.Second)) //10000000000

    time.Sleep(10 * time.Second)//程序休眠10秒
    fmt.Println("end .......")

5、time 的 Unix 和 UnixNano 的方法。

    now := time.Now()

    //now.Unix() 从时间点1970年1月1日 到now实际的毫秒数
    fmt.Println(now.Unix())

    //now.UnixNano() 从时间点1970年1月1日 到now实际的纳秒
    fmt.Println(now.UnixNano())

如果纳秒为单位的unix时间超出了int64能表示的范围,结果是未定义的。注意这就意味着Time零值调用UnixNano方法的话,结果是未定义的。

results matching ""

    No results matching ""