1.基本介绍
在编程中,会经常使用到日期相关函数,比如:统计某代码执行花费的时间等
2.使用细节以及注意事项
(1).在使用时,需要导入time包
(2).time.Time类型,用于表示时间
//1.获取当前时间:now=2022-04-04 18:12:29.158668 +0800 CST m=+0.014286801, type=time.Time
now := time.Now()
fmt.Printf("now=%v, type=%T\n", now, now) //now的类型就是time.Time
(3).获取到当前时间
//1.获取当前时间:now=2022-04-04 18:12:29.158668 +0800 CST m=+0.014286801, type=time.Time
now := time.Now() //now的类型就是time.Time
(4).获取到其它相关日期
//1.获取当前时间:now=2022-04-04 18:12:29.158668 +0800 CST m=+0.014286801, type=time.Time
now := time.Now()
fmt.Printf("now=%v, type=%T\n", now, now) //now的类型就是time.Time
//2.通过now获取年月日,时分秒
fmt.Printf("年=%v\n", now.Year()) //年=2022
fmt.Printf("月=%v\n", now.Month()) //月=April
fmt.Printf("月=%v\n", int(now.Month())) //月=4
fmt.Printf("日=%v\n", now.Day()) // 日=4
fmt.Printf("时=%v\n", now.Hour()) //时=18
fmt.Printf("分=%v\n", now.Minute()) //分=12
fmt.Printf("秒=%v\n", now.Second()) // 秒=29
(5).格式化时间
//格式化日期函数
//第一种方式:dateStr=当前年月日 2022-4-4 18:27:44
fmt.Printf("当前年月日 %d-%d-%d %d:%d:%d\n", now.Year(),
now.Month(), now.Day(), now.Hour(), now.Minute(), now.Second())
dateStr := fmt.Sprintf("当前年月日 %d-%d-%d %d:%d:%d\n", now.Year(), now.Month(), now.Day(), now.Hour(), now.Minute(), now.Second())
fmt.Printf("dateStr=%v\n",dateStr) //格式化字符串,dateStr=当前年月日 2022-4-4 18:27:44
//第二种方式
fmt.Printf(now.Format("2006/01/02 15:04:05")) //返回年月日时分秒,/可以替换成-,空格等
fmt.Println()
fmt.Printf(now.Format("2006-01-02")) //返回年月日
fmt.Println()
fmt.Printf(now.Format("15:04:05")) //返回当前时分秒
fmt.Println()
fmt.Printf(now.Format("01")) //返回当前月份
fmt.Println()
说明: '2006/01/02 15:04:05' 这个字符串的各个数字是固定的,必须这样写.''2006/01/02 15:04:05''这个字符串的各个数字可以自由组合,这样就可以按照程序的需求来返回时间和日期
(6).时间常量
Duration类型代表两个时间点之间经过的时间,以纳秒为单位。可表示的最长时间段大约290年。
const (
Nanosecond Duration = 1 //纳秒
Microsecond = 1000 * Nanosecond //微妙
Millisecond = 1000 * Microsecond //毫秒
Second = 1000 * Millisecond //秒
Minute = 60 * Second //分钟
Hour = 60 * Minute //小时
)
常用的时间段:没有定义一天或超过一天的单元,以避免夏时制的时区切换的混乱。
要将Duration类型值表示为某时间单元的个数,用除法:
second := time.Second fmt.Print(int64(second/time.Millisecond)) // prints 1000
要将整数个某时间单元表示为Duration类型值,用乘法:
seconds := 10 fmt.Print(time.Duration(seconds)*time.Second) // prints 10s
常量的作用:在程序中可用于获取指定时间单位的时间,比如:获取100毫秒: 100 * time.Millisecond
(7).结合Sleep来使用时间常量
//需求:每隔1秒打印一个数字,打印到100退出
//需求2:每隔0.1秒打印一个数字,打印到100退出
var num int = 0
for {
num++
fmt.Println(num)
// time.Sleep(time.Second) //每隔1秒打印一个数字
time.Sleep(time.Millisecond) //每隔0.1秒打印一个数字
if num == 100 {
break
}
}
(8).time的Unix,UnixNano的使用
fmt.Printf("Unix时间戳=%v,UnixNano时间戳=%v\n", time.Now().Unix(), time.Now().UnixNano()) //Unix时间戳=1649075021,UnixNano时间戳=1649075021304918200
//案例:编写一段程序,来统计函数test()执行的时间
package main
import (
"fmt"
"time"
"strconv"
)
func test() {
str := ""
for i := 0; i < 100000; i++ {
str += "hello" + strconv.Itoa(i)
}
}
func main() {
//在执行test之前,先获取当前的unix时间戳
start := time.Now().Unix()
test()
end := time.Now().Unix()
fmt.Printf("执行test()耗时%v\n", end - start)
}
上一节:[go学习笔记.第六章.函数,包,错误处理] 8.字符串中常用的函数
下一节:[go学习笔记.第六章.练习] 循环打印输入年月日,(使用continue实现);随机猜数游戏;输出100以内的所有素数;输出小写的a-z以及大写的A-Z,使用for循环