go語言標準庫 - time

dawnchen發表於2019-04-16

一、目錄

二、簡介

該包提供了對於時間的顯示、轉換以及控制。
精度一直實現到納秒

1. 顯示

type Duration int64 顯示時間間隔
type Location struct 設定顯示的時區
type Month int 顯示月份
type Weekday int 顯示星期
type ParseError struct 解析錯誤

2. 轉換

type Time struct 時間轉換

3. 控制

type Ticker struct 時鐘
type Timer struct

三、例項

1. 等待固定時間間隔,返回Time結構體

package main

import (
	"fmt"
	"time"
)

func main() {
	fmt.Println("begin")
	resTime := <-time.After(3 * time.Second)
	fmt.Printf(
		"after 3 second\nNow the time is %s\n",
		resTime.Format("2006-01-02 15:04:05"))
}

複製程式碼

2. 暫停當前協程

package main

import (
	"fmt"
	"time"
)

func main() {
	fmt.Println("begin")
	time.Sleep(3000 * time.Millisecond)
	fmt.Printf("after 3 second\n")
}
複製程式碼

3. 定時器

package main

import (
	"fmt"
	"log"
	"time"
)

func main() {
	locate, _ := time.LoadLocation("Asia/Shanghai")
	c := time.Tick(2 * time.Second)
	i := 0
	for now := range c {
		i++
		fmt.Printf(
			"%s, 定時器第%d次執行\n",
			now.In(locate).Format("2006-01-02 15:04:05"), i)

	}
}
複製程式碼

4. 時間間隔

時間間隔(type Duration int64)以納秒為最小單元

const (
	Nanosecond  Duration = 1
	Microsecond          = 1000 * Nanosecond
	Millisecond          = 1000 * Microsecond
	Second               = 1000 * Millisecond
	Minute               = 60 * Second
	Hour                 = 60 * Minute
)
複製程式碼

因為Duration也為int型別,所以上面的程式碼可以通過 2 * time.Second 的方式獲得對應的數字。
這個數字可以作為Duration傳入函式中。

5. 選擇時區

package main

import (
	"fmt"
	"log"
	"time"
)

func main() {
	locate, _ := time.LoadLocation("Asia/Shanghai")
	fmt.Printf(
		"當前時區:%s, 當前時間:%s\n", locate.String(),
		time.Now().In(locate).Format("2006-01-02 15:04:05"))

	locate2 := time.FixedZone("UTC-8", 0)
	fmt.Printf("當前時區:%s(東八區),當前時間:%s\n",
		locate2.String(),
		time.Now().In(locate2).Format("2006-01-02 15:04:05"))
}
複製程式碼

6. 計時器

package main

import (
	"fmt"
	"log"
	"time"
)

func main() {
	ticker := time.NewTicker(time.Second)
	defer ticker.Stop()
	for {
		t := <-ticker.C
		fmt.Println(t.In(time.FixedZone("UTC-8", 0)).Format("2006-01-02 15:04:05"))
	}
}
複製程式碼

7. 時間戳和日期相互轉換

package main

import (
	"fmt"
	"log"
	"time"
)

func main() {
	// 時間戳轉日期時間
	curDateTime := time.Now().In(time.FixedZone("UTC-8", 0)).Format("2006-01-02 15:04:05")
	fmt.Println(curDateTime)
	// 日期轉時間戳
	parseTime, _ := time.Parse("2006-01-02 15:04:05", curDateTime)
	fmt.Println(parseTime.Unix())
}
複製程式碼

相關文章