go时间和日期相关函数

一 点睛

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

1 时间和日期相关函数,需要导入 time 包。

2 time.Time 类型,用于表示时间

a 代码

package main
import (
   "fmt"
   "time"
)

func main() {
   // 获取当前时间
   now := time.Now()
   fmt.Printf("now=%v now type=%T\n", now, now)
}

b 测试

now=2021-04-14 18:08:39.6789462 +0800 CST m=+0.014000201 now type=time.Time

3 如何获取到其它的日期信息

a 代码

package main

import (
   "fmt"
   "time"
)

func main() {
   // 获取当前时间
   now := time.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())
}

b 测试

年=2021
月=April
月=4
日=14
时=18
分=10
秒=5

4 格式化日期时间

方式一: 就是使用 Printf 或者 SPrintf

a 代码

package main

import (
   "fmt"
   "time"
)

func main() {
   // 获取当前时间
   now := time.Now()
   // 格式化日期时间
   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)
}

b 测试

当前年月日 2021-4-14 18:12:4
dateStr=当前年月日 2021-4-14 18:12:4

方式二: 使用 time.Format() 方法完成

a 代码

package main

import (
   "fmt"
   "time"
)

func main() {
   // 获取当前时间
   now := time.Now()
   //格式化日期时间的第二种方式
   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("2006"))
   fmt.Println()
}

b 测试

2021-04-14 18:14:00
2021-04-14
18:14:00
2021

c 说明

"2006/01/02 15:04:05" 这个字符串的各个数字是固定的,必须是这样写。

"2006/01/02 15:04:05" 这个字符串各个数字可以自由的组合,这样可以按程序需求来返回时间和日期。

5 时间的常量

const (
    Nanosecond Duration = 1 // 纳秒
    Microsecond = 1000 * Nanosecond // 微秒
    Millisecond = 1000 * Microsecond // 毫秒
    Second = 1000 * Millisecond // 秒
    Minute = 60 * Second // 分钟
    Hour = 60 * Minute // 小时
)

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

100 * time. Millisecond

6 结合 Sleep 来使用一下时间常量

a 代码

package main

import (
   "fmt"
   "time"
)

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

b 测试

1
2
3
4
5
6
7
8
9
10

7 time 的 Unix 和 UnixNano 的方法

a 代码

package main

import (
   "fmt"
   "time"
)

func main() {
   // 获取当前时间
   now := time.Now()
   //Unix和UnixNano的使用
   fmt.Printf("unix时间戳=%v unixnano时间戳=%v\n", now.Unix(), now.UnixNano())
}

b 测试

unix时间戳=1618395648 unixnano时间戳=1618395648974226600

二 实战

1 需求

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

2 代码

package main

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

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

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

3 测试

执行test03()耗费时间为7秒

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值