时间
Ubuntu 修改系统时间
sudo date -s 07:57:00
时间
// NowSecTs 秒级时间戳
func NowSecTs() int64 {
return time.Now().UTC().UnixNano() / 1e9
}
// NowTs 毫秒级时间戳
func NowTs() int64 {
return time.Now().UTC().UnixNano() / 1e6
}
// NowUsTs 微秒级时间戳
func NowUsTs() int64 {
return time.Now().UTC().UnixNano() / 1e3
}
// SysTime2Ts 系统时间转化为 ms时间戳
func SysTime2Ts(t time.Time) int64 {
return t.UTC().UnixNano() / 1e6
}
// TodayStartTs 取得今天零点的时间戳(毫秒)
func TodayStartTs() int64 {
now := time.Now().UTC()
todayStart := time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, now.UTC().Location())
return todayStart.UnixNano() / 1e6
}
// Today5amTs 取得今天5点的时间戳(毫秒)
func Today5amTs() int64 {
now := time.Now().UTC()
today5am := time.Date(now.Year(), now.Month(), now.Day(), 5, 0, 0, 0, now.UTC().Location())
ret := today5am.UnixNano() / 1e6
return ret
}
// ResetFieldTs 取得下一个UTC5点的时间戳(毫秒)
func ResetFieldTs(nowMs int64) int64 {
now := time.Unix(0, nowMs*1e6).UTC()
if nowMs <= Today5amTs() {
return Today5amTs()
} else {
nowDay := time.Date(now.Year(), now.Month(), now.Day(), 5, 0, 0, 0, now.Location())
nextDay := nowDay.AddDate(0, 0, 1)
return nextDay.UTC().UnixNano() / 1e6
}
}
// NextDayTs 获取相对于传入时间的下一个UTC零点的时间戳
func NextDayTs(nowMs int64) int64 {
now := time.Unix(0, nowMs*1e6).UTC()
nowDay := time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, now.UTC().Location())
nextDay := nowDay.AddDate(0, 0, 1)
return nextDay.UTC().UnixNano() / 1e6
}
// Ms2Day 将得到的时间戳转化到天
func Ms2Day(t int64) int64 {
return t / 1000 / 3600 / 24
}
// Ms2Sec 毫秒 -> 秒
func Ms2Sec(t int64) int64 {
return t / 1000
}
// Ms2Min 毫秒 -> 分
func Ms2Min(t int64) int64 {
return t / 1000 / 60
}
// Ms2Hour 毫秒 -> 小时
func Ms2Hour(dura int64) float32 {
return float32(dura) / 1000 / 3600
}
// Sec2Ms 秒 -> 毫秒
func Sec2Ms(t int32) int32 {
return t * 1000
}
// Min2Ms 分钟 -> 毫秒
func Min2Ms(t int32) int32 {
return t * 1000 * 60
}
// Hour2Ms 小时 -> 毫秒
func Hour2Ms(t int32) int32 {
return t * 3600 * 1000
}
// GetNowWeekDay 当前星期几
func GetNowWeekDay() time.Weekday {
return time.Now().UTC().Weekday()
}
var (
BJCron, _ = timer.NewCronExpr("0 0 16 * * *") // 固定 UTC+8:00调用 北京时间 8 点
)
// BeginningOfTheDay 一天的开始时间
func BeginningOfTheDay() int64 {
now := time.Now().UTC().Unix()
return now - (now % SecondPerDay)
}
// EndOfTheDay 一天的结束时间
func EndOfTheDay() int64 {
now := time.Now().UTC().Unix()
return now - (now % SecondPerDay) + SecondPerDay
}
// TimeUTCSecNow UTC时间 秒
func TimeUTCSecNow() int64 {
return time.Now().UTC().Unix()
}
// TimeUTCSecToTime UTC时间 秒 => time
func TimeUTCSecToTime(t int64) time.Time {
return time.Unix(t, 0).UTC()
}
// TimeUTCNow UTC时间
func TimeUTCNow() time.Time {
return time.Now().UTC()
}
// NowTsAndZeroTs 当前时间戳 以及 当天零点时间戳
func NowTsAndZeroTs() (nowTs, zeroTs int64) {
now := time.Now()
nowTs = now.UTC().UnixNano() / 1e6
zeroTs = time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, now.UTC().Location()).UnixNano() / 1e6
return
}
// SecondPerDay 每天秒数
const SecondPerDay = 24 * 60 * 60
// SecondPerHour 每小时秒数
const SecondPerHour = 60 * 60
// SecondPerMinute 每分钟秒数
const SecondPerMinute = 60
// .
const (
// StdTimeFormat 常用标准时间格式
BITimerFormat = "2006-01-02 15:04:05"
// datetime format schema
DateTimeSchema string = "2006-01-02 15:04:05.000000"
)
// TsToBIFormat 时间戳转为BI格式
func TsToBIFormat(ms int64) string {
return Ms2Time(ms).Format(DateTimeSchema)
}
// TsToBIFormatSimple BI数据格式要求
func TsToBIFormatSimple(ms int64) string {
return time.Unix(ms/1e3, 0).UTC().Format(BITimerFormat)
}
// Ms2Time 毫秒转为时间
func Ms2Time(ms int64) time.Time {
return time.Unix(ms/1000, ms%1000*1e6).UTC()
}
// GetTimeWithDefaultSchema 使用 DateTimeSchema 来格式化
func GetTimeWithDefaultSchema() string {
return time.Now().UTC().Format(DateTimeSchema)
}
// GetTargUTCTimeWithDefaultSchema 使用 DateTimeSchema 来格式化
func GetTargUTCTimeWithDefaultSchema(utcTime time.Time) string {
return utcTime.Format(DateTimeSchema)
}
// BJNextDayTs 北京时间获取相对于传入时间的下一个UTC零点的时间戳
func BJNextDayTs(nowMs int64) int64 {
now := time.Unix(0, nowMs*1e6).UTC()
next := BJCron.Next(now)
return util.SysTime2Ts(next)
}
// GetNextMondayTs 获取周一UTC零点时间
func GetNextMondayTs() int64 {
now := time.Now()
offset := int(8 - now.Weekday())
if offset == 8 {
offset = 1
}
weekStartDate := time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, time.UTC).AddDate(0, 0, offset)
return weekStartDate.UTC().UnixNano() / 1e6
}
// TodayStartSec 今天开始时间(second)
func TodayStartSec() int64 {
return util.Ms2Sec(util.TodayStartTs())
}
// TodayEndSec 今天结束时间(等同: 明天开始时间)(second)
func TodayEndSec() int64 {
return util.Ms2Sec(util.NextDayTs(util.NowTs()))
}
// NextDayTs 获取相对于传入时间的下一个UTC零点的时间戳
func NextDayTs(nowMs int64) int64 {
now := time.Unix(0, nowMs*1e6).UTC()
nowDay := time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, now.UTC().Location())
nextDay := nowDay.AddDate(0, 0, 1)
return nextDay.UTC().UnixNano() / 1e6
}
// BJNextDayTs 北京时间获取相对于传入时间的下一个UTC零点的时间戳
func BJNextDayTs(nowMs int64) int64 {
now := time.Unix(0, nowMs*1e6).UTC()
next := BJCron.Next(now)
return util.SysTime2Ts(next)
}