Golang 包01,时间 time
Posted 尚墨1111
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Golang 包01,时间 time相关的知识,希望对你有一定的参考价值。
Golang time包
Golang 时间 time包
1 写在前面的话:
当遇到时间相关的需求,但是不知道有哪个对应的方法,并且google baidu 搜不到的情况,建议直接查看接口API文档,没准就能找到你不知道但刚好能满足需求的方法,毕竟代码的核心不是重复造轮子,当你觉得繁琐时,就是优化的时机,并且这个时机很大可能别人已经优化了
2 time包中常见的几种用法
- 当前时间
time.Now()
- 把时间格式化成字符串(time->string) :
time.Now().Format("2006-01-02 15:04:05")
- 把日期字符串转化为时间(string -> time) :
time.Parse("01-02-2006", "06-17-2013")
- 把纳秒转化为时间字符串(int64 -> string):
time.Unix(timestamp, 0).Format("2006-01-02 15:04:05")
- 获取当前时间时间戳
time.Now().UnixNano()
- 自己组装时间
time.Date()
(看下面) - 时间间隔多久
time.Now().Truncate(时间)
- 时间格式相互转化
3 详情
3.1 time.Format,时间格式化成字符串(time->string)
func (t Time) Format(layout string) string
layout对应的符合规定的格式
Year: "2006" "06"
Month: "Jan" "January" "01" "1"
Day of the week: "Mon" "Monday"
Day of the month: "2" "_2" "02"
Day of the year: "__2" "002"
Hour: "15" "3" "03" (PM or AM)
Minute: "4" "04"
Second: "5" "05"
AM/PM mark: "PM"
3.2 time.Parse,日期字符串转化为时间(string -> time)
**Parse 解析格式化的字符串并返回它所代表的时间值。**请参阅名为 Layout 的常量的文档以了解如何表示格式。第二个参数必须可以使用作为第一个参数提供的格式字符串(布局)进行解析
// Parse parses a formatted string and returns the time value it represents.
// layout:解析格式
// value:需要按格式解析的字符串,必须与格式对应
func Parse(layout, value string) (Time, error)
应用:
注意,并不是必须按熟悉的 2006-01-02 15:03:04 这类符合直觉的格式才可以转化,实际上,只要你需要什么样的格式都可以
// 字符串 122334 转时间
func ConvertStr2Time(str string) (time.Time, error)
// 获取当天的日期
now := time.Now()
datetimeStr := now.Local().Format("20060102") + str
snapshotTime, err := time.Parse("20060102150405", datetimeStr)
return snapshotTime.Local().Format("2006-01-02 15:04:05.000"), nil
3.3 时区
now := time.Now()
local1, err1 := time.LoadLocation("") //等同于"UTC"
if err1 != nil
fmt.Println(err1)
local2, err2 := time.LoadLocation("Local")//服务器上设置的时区
if err2 != nil
fmt.Println(err2)
local3, err3 := time.LoadLocation("America/Los_Angeles")
if err3 != nil
fmt.Println(err3)
fmt.Println(now.In(local1))
fmt.Println(now.In(local2))
fmt.Println(now.In(local3))
//output:
//2016-12-04 07:39:06.270473069 +0000 UTC
//2016-12-04 15:39:06.270473069 +0800 CST
//2016-12-03 23:39:06.270473069 -0800 PST
3.4 输出秒、毫秒、纳秒格式时间戳
func main()
fmt.Printf("时间戳(秒):%v;\\n", time.Now().Unix())
fmt.Printf("时间戳(纳秒):%v;\\n",time.Now().UnixNano())
fmt.Printf("时间戳(毫秒):%v;\\n",time.Now().UnixNano() / 1e6)
fmt.Printf("时间戳(纳秒转换为秒):%v;\\n",time.Now().UnixNano() / 1e9)
3.5 Time包格式转化
// 将自定义时间格式转化为 Time 格式
time.Time(其他格式)
文章可参考:https://www.jianshu.com/p/8ac396850a3d
package util
import (
"cts/infra/midware/mysql"
"strconv"
"time"
)
// ConvertStr2Time 字符串转时间
func ConvertStr2Time(str string) (time.Time, error)
return time.ParseInLocation("2006-01-02 15:04:05", str, time.Local)
// ConvertTime2Str 时间转字符串
func ConvertTime2Str(time time.Time) string
if time.IsZero()
return ""
return time.Local().Format("2006-01-02 15:04:05")
// ConvertTime2StrV2 时间转字符串(毫秒)
func ConvertTime2StrV2(time time.Time) string
return time.Local().Format("2006-01-02 15:04:05.000")
// ConvertTime2Loc 时间转为本地时间
func ConvertTime2Loc(t time.Time) (string, error)
loc, err := time.LoadLocation("Local")
if err != nil
return "", err
return t.In(loc).Format("2006-01-02 15:04:05"), nil
// ConvertStr2TimePtr str转时间
func ConvertStr2TimePtr(str string) *time.Time
if len(str) < 1
return nil
t, err := time.ParseInLocation("2006-01-02 15:04:05", str, time.Local)
if err != nil
return nil
return &t
4 实际应用场景
4.1 时间初始化
time.Now
//通过字符串,默认UTC时区初始化Time
func Parse(layout, value string) (Time, error)
//通过字符串,指定时区来初始化Time
func ParseInLocation(layout, value string, loc *Location) (Time, error)
//通过unix 标准时间初始化Time
func Unix(sec int64, nsec int64) Time
4.2 自己组装时间
参考文章:https://cloud.tencent.com/developer/article/1467743
// Date()
timeEnd := time.Date(timeNow.Year(), timeNow.Month(), timeNow.Day(), 23, 59, 59, 0, time.Local)
// 除了用Date()方法,还可以结合使用parse()和Formate()生成
4.3 生成以时间为基准的Id编号
// GenDateTimeLikeId 获取当前时间生成id,示例 2022-05-24 20:08:26.052 ==> 220524200826052
func (worker idWorker) GenDateTimeLikeId() int64
local := time.Now().Local()
timeStr := local.Format("060102150405.000")
timeStr = strings.Replace(timeStr, ".", "", -1)
id, err := strconv.ParseInt(timeStr, 10, 64)
if err != nil
return 0
return id
以上是关于Golang 包01,时间 time的主要内容,如果未能解决你的问题,请参考以下文章