Golang 實現時間戳和時間的轉化
何為時間戳:
時間戳是使用數字簽名技術產生的數據,簽名的對象包括了原始文件資訊、簽名參數、簽名時間等資訊。時間戳系統用來產生和管理時間戳,對簽名對象進行數字簽名產生時間戳,以證明原始文件在簽名時間之前已經存在。
時間戳格式種類:
- 10位數的時間戳是以 秒 為單位,如:1530027865
- 13位數的時間戳是以 毫秒 為單位, 如:1530027865231
- 19位數的時間戳是以 納秒 為單位,如:1530027865231834600
程式碼
/*
@Time : 2022/11/8 14:52
@Author : zic
@File : time
@Software: GoLand
@blog : //www.cnblogs.com/zichliang
*/
package main
import (
"fmt"
"strconv"
"time"
)
func main() {
//獲取當前時間 並格式化
t := time.Now()
fmt.Println(t.Format("2006-01-02 15:04:05"))
//獲取當前時間戳
t = time.Now()
fmt.Println(t.Unix()) //1531293019
//時間戳轉換為時間
tm := time.Unix(1667889978, 0)
fmt.Println(tm.Format("2006-01-02 15:04:05"))
//時間轉換為時間戳
timeUnix, _ := time.Parse("2006-01-02 15:04:05", "2022-11-08 14:46:18")
fmt.Println(timeUnix.Unix())
// 13位時間戳轉換成時間
data, _ := strconv.ParseInt(strconv.Itoa(1667888972000), 10, 64)
nowTime := time.Unix(data/1000, 0).Format("2006-01-02 15:04:05")
fmt.Println(nowTime) //2022-11-08 14:29:32
// (標準時間 2022-11-08 14:29:32 )時間轉13位時間戳
timeUnix, _ = time.Parse("2006-01-02 15:04:05", nowTime)
fmt.Println(timeUnix.UnixNano() / 1e6) // 1667917772000
// 非標準時間 轉13位時間戳
formatTime := "2022-11-08"
ft, _ := time.Parse("2006-01-02", formatTime)
fmt.Println((ft.UTC().Unix() - 8*3600) * 1000) // 10位就不用乘1000 其實感覺有更好的方法 ....
}