package time
import “time”
time包提供了时间的显示和测量用的函数。日历的计算采用的是公历。
func Now() Time
Now返回当前本地时间。
Time 是结构体类型
type Time
type Time struct { // 内含隐藏或非导出字段 }
time类型:time.Time, 值: 2021-11-14 15:14:48.0798966 +0800 CST m=+0.012947301
func (Time) Year
func (t Time) Year() int
返回时间点t对应的年份。
func (Time) Month
func (t Time) Month() Month
返回时间点t对应那一年的第几月。
package main
import (
"fmt"
"time"
)
func main() {
now := time.Now()
fmt.Printf("time类型:%T, 值: %v \n", now, now)
fmt.Printf("年:%v \n", now.Year())
fmt.Printf("月:%v \n", now.Month())
fmt.Printf("月:%v \n", int(now.Month())) // 转成数字
fmt.Printf("日:%v \n", now.Day())
fmt.Printf("时:%v \n", now.Hour())
fmt.Printf("分:%v \n", now.Minute())
fmt.Printf("秒:%v \n", now.Second())
}
time类型:time.Time, 值: 2021-11-14 15:22:03.1406364 +0800 CST m=+0.013013401
年:2021
月:November
月:11
日:14
时:15
分:22
秒:3
格式化日期和时间
方式1,使用Sprintf或Printf
%d 表示为十进制
%02d
%d
fmt.Printf("当前年月日: %d-%d-%02d %02d:%02d:%02d \n",
now.Year(), now.Month(), now.Day(),
now.Hour(), now.Minute(), now.Second())
当前年月日: 2021-11-14 15:35:58
func Sprintf(format string, a …interface{}) string
Sprintf根据format参数生成格式化的字符串并返回该字符串。
变量保存输出
dataStr := fmt.Sprintf("xx当前年月日: %d-%d-%02d %02d:%02d:%02d \n",
now.Year(), now.Month(), now.Day(),
now.Hour(), now.Minute(), now.Second())
fmt.Printf("dataStr类型: %T, 值:%s \n", dataStr, dataStr)
// dataStr类型: string, 值:当前年月日: 2021-11-14 15:39:07
方式2,now.Format()
func (Time) Format
func (t Time) Format(layout string) string
Format根据layout指定的格式返回t代表的时间点的格式化文本表示。layout定义了参考时间:
Mon Jan 2 15:04:05 -0700 MST 2006
2006-01-02 15:04:05
Golang语言规定的时间,据说是设计者产生想法的时间
now := time.Now()
var curtime = now.Format("2006-01-02 15:04:05")
fmt.Printf("curtime类型: %T, 值: %s \n", curtime, curtime)
var time01 = now.Format("2006-01-02") // 年月日
fmt.Printf("time01类型: %T, 值: %s \n", time01, time01)
var time02 = now.Format("15:04:05") // 时分秒
fmt.Printf("time02类型: %T, 值: %s \n", time02, time02)
var time03 = now.Format("01") // 月份
fmt.Printf("time03类型: %T, 值: %s \n", time03, time03)
curtime类型: string, 值: 2021-11-14 15:53:44
time01类型: string, 值: 2021-11-14
time02类型: string, 值: 15:53:44
time03类型: string, 值: 11
时间常量
type Duration int64
Duration类型代表两个时间点之间经过的时间,以纳秒为单位。可表示的最长时间段大约290年。
const (
Nanosecond Duration = 1 // 纳秒
Microsecond = 1000 * Nanosecond // 微秒
Millisecond = 1000 * Microsecond // 毫秒
Second = 1000 * Millisecond // 秒
Minute = 60 * Second // 分
Hour = 60 * Minute // 时
)
// time.Second
// 时间常量使用
i := 0
for {
i++
fmt.Println(i)
// 休眠
// time.Sleep(time.Second)
time.Sleep(time.Millisecond * 100)
if i >= 20 {
break
}
}
获取当前unix时间戳和unixnano时间戳
func (Time) Unix
func (t Time) Unix() int64
Unix将t表示为Unix时间,即从时间点January 1, 1970 UTC到时间点t所经过的时间(单位秒)。
func (Time) UnixNano
func (t Time) UnixNano() int64
UnixNano将t表示为Unix时间,即从时间点January 1, 1970 UTC到时间点t所经过的时间(单位纳秒)。如果纳秒为单位的unix时间超出了int64能表示的范围,结果是未定义的。注意这就意味着Time零值调用UnixNano方法的话,结果是未定义的。
1970-01-01: 00:00:00
now := time.Now()
fmt.Printf("unix时间戳=%v, unixnano时间戳=%v\n", now.Unix(), now.UnixNano())
// unix时间戳=1636877669, unixnano时间戳=1636877669185278600
练习实践
统计代码执行时间
func test() {
str := ""
for i := 0; i < 100000; i++ {
str += "hello" + strconv.Itoa(i)
}
// fmt.Println("test-str", str)
}
// 统计消耗时间
var startNuix = time.Now().Unix()
test()
var endNuix = time.Now().Unix()
fmt.Println("startNuix = ", startNuix)
fmt.Println("endNuix = ", endNuix)
var exectime = endNuix - startNuix
fmt.Printf("exectime = %v", exectime)
// startNuix = 1636878354
// endNuix = 1636878359
// exectime = 5