2020-09-27 15:26:06 +08:00
|
|
|
package utils
|
|
|
|
|
|
|
|
|
|
import (
|
2021-12-08 15:17:45 +08:00
|
|
|
"github.com/TeaOSLab/EdgeNode/internal/goman"
|
2020-09-27 15:26:06 +08:00
|
|
|
"time"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
var unixTime = time.Now().Unix()
|
2021-12-02 11:30:47 +08:00
|
|
|
var unixTimeMilli = time.Now().UnixMilli()
|
2020-09-27 15:26:06 +08:00
|
|
|
|
|
|
|
|
func init() {
|
2022-07-26 09:41:43 +08:00
|
|
|
var ticker = time.NewTicker(200 * time.Millisecond)
|
2021-12-08 15:17:45 +08:00
|
|
|
goman.New(func() {
|
2020-09-27 15:26:06 +08:00
|
|
|
for range ticker.C {
|
|
|
|
|
unixTime = time.Now().Unix()
|
2021-12-02 11:30:47 +08:00
|
|
|
unixTimeMilli = time.Now().UnixMilli()
|
2020-09-27 15:26:06 +08:00
|
|
|
}
|
2021-12-08 15:17:45 +08:00
|
|
|
})
|
2020-09-27 15:26:06 +08:00
|
|
|
}
|
|
|
|
|
|
2021-12-02 11:30:47 +08:00
|
|
|
// UnixTime 最快获取时间戳的方式,通常用在不需要特别精确时间戳的场景
|
2020-09-27 15:26:06 +08:00
|
|
|
func UnixTime() int64 {
|
2021-12-02 11:30:47 +08:00
|
|
|
return unixTime
|
|
|
|
|
}
|
|
|
|
|
|
2022-01-11 09:25:34 +08:00
|
|
|
// FloorUnixTime 取整
|
|
|
|
|
func FloorUnixTime(seconds int) int64 {
|
|
|
|
|
return UnixTime() / int64(seconds) * int64(seconds)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// CeilUnixTime 取整并加1
|
|
|
|
|
func CeilUnixTime(seconds int) int64 {
|
|
|
|
|
return UnixTime()/int64(seconds)*int64(seconds) + int64(seconds)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// NextMinuteUnixTime 获取下一分钟开始的时间戳
|
|
|
|
|
func NextMinuteUnixTime() int64 {
|
|
|
|
|
return CeilUnixTime(60)
|
|
|
|
|
}
|
|
|
|
|
|
2021-12-02 11:30:47 +08:00
|
|
|
// UnixTimeMilli 获取时间戳,精确到毫秒
|
|
|
|
|
func UnixTimeMilli() int64 {
|
|
|
|
|
return unixTimeMilli
|
2020-09-27 15:26:06 +08:00
|
|
|
}
|
2021-12-08 17:41:39 +08:00
|
|
|
|
|
|
|
|
// GMTUnixTime 计算GMT时间戳
|
|
|
|
|
func GMTUnixTime(timestamp int64) int64 {
|
|
|
|
|
_, offset := time.Now().Zone()
|
|
|
|
|
return timestamp - int64(offset)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// GMTTime 计算GMT时间
|
|
|
|
|
func GMTTime(t time.Time) time.Time {
|
|
|
|
|
_, offset := time.Now().Zone()
|
|
|
|
|
return t.Add(-time.Duration(offset) * time.Second)
|
|
|
|
|
}
|