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方法的话,结果是未定义的。