45 lines
1.1 KiB
Go
45 lines
1.1 KiB
Go
package utils
|
|
|
|
import (
|
|
"fmt"
|
|
"time"
|
|
)
|
|
|
|
func ParseUnixTimestamp2LocalTime(ts int64) (local time.Time) {
|
|
sec := int64(0)
|
|
nsec := int64(0)
|
|
switch {
|
|
case ts >= 1e18: // 纳秒
|
|
sec = ts / int64(1e9)
|
|
nsec = ts % int64(1e9)
|
|
case ts >= 1e15: // 微妙
|
|
sec = ts / int64(1e6)
|
|
nsec = ts % int64(1e6)
|
|
case ts >= 1e12: // 毫秒
|
|
sec = ts / int64(1e3)
|
|
nsec = ts % int64(1e3)
|
|
case ts >= 1e9: // 秒
|
|
sec = ts
|
|
nsec = 0
|
|
default:
|
|
panic(fmt.Errorf("ts:%v invalid parse to local time"))
|
|
}
|
|
|
|
t := time.Unix(sec, nsec)
|
|
ts2str := t.Format("2006-01-02 15:04:05.000000000")
|
|
local, _ = time.ParseInLocation("2006-01-02 15:04:05.000000000", ts2str, time.Local)
|
|
return local
|
|
}
|
|
|
|
// GetTimeZoneLocalTime 获取指定时区的当地时间
|
|
func GetTimeZoneLocalTime(timeZone int) time.Time {
|
|
offsetZone := time.FixedZone(time.Local.String(), timeZone*60*60)
|
|
return time.Now().In(offsetZone)
|
|
}
|
|
|
|
// GetTimeZoneLocalTimeByTimestamp 获取指定时间戳与时区的当地时间
|
|
func GetTimeZoneLocalTimeByTimestamp(ts int64, timeZone int) time.Time {
|
|
offsetZone := time.FixedZone(time.Local.String(), timeZone*60*60)
|
|
return time.Unix(ts, 0).Local().In(offsetZone)
|
|
}
|