【第二十五篇】Go 时间和日期函数详解🔥🔥

131 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第15天,点击查看活动详情

一、时间和日期相关函数:

说明:在编程中,程序员会经常使用到日期相关函数,比如:统计某段代码执行花费的时间等等。

  1. 时间和日期相关函数,需要导入 time
  2. time.Time 类型,用于表示时间
  3. 获取到当前时间的方法:
package main

import (
	"fmt"
	"time"
)

func main() {
	// 看看日期和时间相关函数的使用和方法:
	// 1. 获取当前时间:
	now := time.Now()
	fmt.Printf("now = %v\nnow type = %T", now, now)
}


  1. 如何获取到其它的日期信息
package main

import (
	"fmt"
	"time"
)

func main() {
	// 看看日期和时间相关函数的使用和方法:
	// 1. 获取当前时间:
	now := time.Now()
	fmt.Printf("now = %v\nnow type = %T", now, now)

	// 2. 通过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())
}


  1. 格式化日期时间:
package main

import (
	"fmt"
	"time"
)

func main() {
	// 看看日期和时间相关函数的使用和方法:
	// 1. 获取当前时间:
	now := time.Now()
	fmt.Printf("now = %v\nnow type = %T", now, now)

	// 格式化日期和时间
	// 方式一:
	fmt.Printf("当前年月日 %2d-%02d-%02d %02d:%02d:%02d\n", now.Year(),
		now.Day(), now.Hour(), now.Day(), now.Second())

	datestr := fmt.Sprintf("当前年月日 %2d-%02d-%02d %02d:%02d:%02d\n", now.Year(),
		now.Day(), now.Hour(), now.Day(), now.Second())
	fmt.Printf("dateStr = %v\n", datestr)

	// 方式二:就是一个小彩蛋
	fmt.Printf(now.Format("2006/01/02 15:04:25"))
	fmt.Println()
	fmt.Printf(now.Format("2006-01-02"))
	fmt.Println()
	fmt.Printf("15:04:25")
	fmt.Println()

}

对上面的总结:

  1. "2006/01/02 15:04:25" 这个字符串的各个数字是固定的,必须是这样写。
  2. "2006/01/02 15:04:25" 这个字符串各个数字可以自由的组合,这样可以按程序需求来返回时间和日期。

  1. 时间常量:
  2. 休眠:
package main

import (
	"fmt"
	"time"
)

func main() {

	// 时间常量:
	// 需求1:,每隔1秒钟打印一个数字,打印到100时就退出:
	// 需求2:
	i := 0
	for {
		i++
		fmt.Println(i)
		// 休眠
		// time.Sleep(time.Second)
		time.Sleep(time.Millisecond * 100)
		if i == 100 {
			break
		}

	}
}

常量的作用:在程序中可用于获取指定时间单位的时间,比如想得到 100 毫秒 100 * time.Millisecond


  1. 获取当前 unix 时间戳 和 unixnano 时间戳 (作用是可以获取随机数字)
package main

import (
	"fmt"
	"time"
)

func main() {

	// 获取当前时间:
	now := time.Now()
	// uninx 和 uninxNano 的使用
	fmt.Printf("unix 时间戳 = %v , uninNano时间戳 = %v", now.Unix(), now.UnixNano())
}


二、最佳实践案例:

编写一段代码来统计,函数test03执行的时间

package main

import (
	"fmt"
	"strconv"
	"time"
)

func test03() {

	str := ""
	for i := 0; i < 100000; i++ {
		str += "hello" + strconv.Itoa(i)
	}
}

func main() {
	// 在执行 test 03 前,先获得到当前的 unix 时间戳
	start := time.Now().Unix()
	test03()
	end := time.Now().Unix()
	fmt.Printf("执行test()耗费时间为:%v秒\n", end-start)
}