零基础 go - 40(时间日期相关函数)

3 阅读3分钟
  • 需要导入 time 包
  • time.Time 类型表示时间,time.Duration 类型表示持续时间

常用函数

1、返回当前时间:time.Now()

package main

import(
    "fmt"
    "time"
)

func main() {
    today := time.Now()
    fmt.Println("Current time: ", today) // 输出当前时间
    fmt.Printf("类型为%T", today) // 输出类型为 time.Time
    }

2、获取年、月、日、时、分、秒

  • 方式1:time.Time 类型有对应的方法获取年、月、日、时、分、秒等信息
  • 方式2:time.Time 类型的 Format 方法,传入一个格式化字符串,格式化字符串需要使用 Go 的时间 2006-01-02 15:04:05 来表示年月日时分秒
package main

import(
    "fmt"
    "time"
)

func main() {
    // 方式1: 使用 time.Time 类型的方法获取年、月、日、时、分、秒等信息
    today := time.Now()
    year := today.Year() // 获取年
    // month := today.Month() // 获取月,返回 time.Month 类型
    month := int(today.Month()) // 获取月,这样返回的就是数字类型的月份
    day := today.Day() // 获取日
    hour := today.Hour() // 获取时
    minute := today.Minute() // 获取分
    second := today.Second() // 获取秒
    fmt.Printf("当前时间:%d年%d月%d日 %d时%d分%d秒", year, month, day, hour, minute, second)


    // 方式2:使用 time.Format
    fmt.Println("当前时间:", time.Now().Format("2006-01-02 15:04:05"))
    fmt.Println("当前年份:", time.Now().Format("2006")
    fmt.Println("当前月份:", time.Now().Format("01"))
    fmt.Println("当前日期:", time.Now().Format("02"))
    fmt.Println("当前小时:", time.Now().Format("15"))
    fmt.Println("当前分钟:", time.Now().Format("04"))
    fmt.Println("当前秒数:", time.Now().Format("05"))
}

3、格式化时间

  • 方式一:使用 fmt.Printf() 或者 fmt.Sprintf()
  • 方式二:使用 time.Time 类型的 Format 方法,传入一个格式化字符串,格式化字符串需要使用 Go 的时间 2006-01-02 15:04:05 来表示年月日时分秒
package main

import(
"fmt"
"time"
)

func main() {
    today := time.Now()
    // 方式1: 使用fmt.Printf() 或者 fmt.Sprintf() 函数
    datestr := fmt.Sprintf("%d-%02d-%02d %02d:%02d:%02d", today.Year(), today.Month(), today.Day(), today.Hour(), today.Minute(), today.Second())
    fmt.Println("当前时间:", datestr)
    fmt.Printf("当前时间:%d-02d-%02d %02d:%02d:%02d", today.Year(), today.Month(), today.Day(), today.Hour(), today.Minute(), today.Second())


    // 方式2:使用 time.Format
    fmt.Println("当前时间:", time.Now().Format("2006-01-02 15:04:05"))
    fmt.Println("当前年份:", time.Now().Format("2006"))
    fmt.Println("当前月份:", time.Now().Format("01"))
    fmt.Println("当前日期:", time.Now().Format("02"))
    fmt.Println("当前小时:", time.Now().Format("15"))
    fmt.Println("当前分钟:", time.Now().Format("04"))
    fmt.Println("当前秒数:", time.Now().Format("05"))
}

4、时间常量

Go 语言在 time 包中定义了一些时间常量,表示不同的时间单位,

  • time.Second 表示一秒钟
  • time.Minute 表示一分钟
  • time.Hour 表示一小时
  • time.Millisecond 表示一毫秒
  • time.Microsecond 表示一微秒
  • time.Nanosecond 表示一纳秒
  • 这些常量的底层类型是 time.Duration,可以用于表示持续时间。
package main

import(
    "fmt"
    "time"
)

func main() {
    fmt.Println("一秒钟:", time.Second) // 输出 1s
    fmt.Println("一分钟:", time.Minute) // 输出 1m0s
    fmt.Println("一小时:", time.Hour) // 输出 1h0m0s
    fmt.Println("一毫秒:", time.Millisecond) // 输出 1ms
    fmt.Println("一微秒:", time.Microsecond) // 输出 1µs
    fmt.Println("一纳秒:", time.Nanosecond) // 输出 1ns
}

5、time.Sleep() 函数

  • time.Sleep() 函数可以让当前 goroutine 休眠指定的持续时间,参数类型是 time.Duration,可以使用上面提到的时间常量来指定休眠时间
package main

import(
    "fmt"
    "time"
)

func main() {
    // 每一秒钟打印一次当前时间,打印五次
    for i := 0; i < 5; i++ {
        fmt.Println("当前时间:", time.Now().Format("2006-01-02 15:04:05"))
        time.Sleep(time.Second) // 休眠一秒钟
    }




    // 休眠两秒钟
    fmt.Println("开始休眠:", time.Now().Format("2006-01-02 15:04:05"))
    time.Sleep(2 * time.Second) // 休眠两秒钟
    fmt.Println("结束休眠:", time.Now().Format("2006-01-02 15:04:05"))
}

6、time 的 Unix() 和 UnixNano() 方法

  • time.Time 类型的 Unix() 方法可以返回时间对应的 Unix 时间戳,单位是秒,类型是 int64
  • time.Time 类型的 UnixNano() 方法可以返回时间对应的 Unix 时间戳,单位是纳秒,类型是 int64
package main

import(
    "fmt"
    "time"
)

func main() {
    now := time.Now()
    unixTimestamp := now.Unix() // 获取 Unix 时间戳,单位是秒
    unixNanoTimestamp := now.UnixNano() // 获取 Unix 时间戳,单位是纳秒
    fmt.Println("当前时间:", now.Format("2006-01-02 15:04:05"))
    fmt.Println("Unix 时间戳(秒):", unixTimestamp)
    fmt.Println("Unix 时间戳(纳秒):", unixNanoTimestamp)


    // 计算循环需要的时间
    start := time.Now()
    sum := 0
    for i := 0; i < 100000000; i++ {
        sum += i
    }
    end := time.Now()
    duration := end.Sub(start) // 计算持续时间,类型是 time.Duration
    fmt.Println("循环耗时:", duration)
}