Skip to main content

时间

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)
}