package frame
import (
"strconv"
"time"
)
const SecondPerWeek = int64(24 * 60 * 60 * 7)
const SecondPerDay = int64(24 * 60 * 60)
const SecondPerHour = int64(60 * 60)
const SecondPerMinute = int64(60)
const SecondPerYear = int64(365 * 24 * 60 * 60)
type Frame struct {
Time int64
TimeCommon time.Time
}
func FrameTimeUTC() *Frame {
now := time.Now()
return &Frame{
Time: now.UTC().Unix(),
TimeCommon: now.UTC(),
}
}
//时区存储位置 cd /usr/share/zoneinfo/
func FrameTime() *Frame {
locC, _:= time.LoadLocation("Asia/Shanghai")
now := time.Now().In(locC)
return &Frame{
Time: now.Unix(),
TimeCommon: now,
}
}
func (f *Frame) BeginningOfTheDay() int64 {
return f.Time - (f.Time % SecondPerDay)
}
func (f *Frame) EndingOfTheDay() int64 {
return f.Time - (f.Time % SecondPerDay) + SecondPerDay
}
func (f *Frame) Weekday() time.Weekday {
nowDay := f.TimeCommon.Weekday()
if nowDay == time.Sunday {
nowDay += 7
}
return nowDay
}
func (f *Frame) ToString() string {
return strconv.FormatInt(f.Time, 10)
}
func (f *Frame) ToTimeUTCStr() string {
return time.Unix(f.Time, 0).Format("2006-01-02 15:04:05")
}
func (f *Frame) ToHourStr() string {
return time.Unix(f.Time, 0).Format("2006010215")
}
func (f *Frame) ToTenMinStr() string {
return time.Unix(f.Time, 0).Format("200601021504")[:11]
}
//只取时分秒
func (f *Frame) ToTimeDHSStr() string {
return time.Unix(f.Time, 0).Format("15:04:05")
}
func (f *Frame) ToInt() int {
return int(f.Time)
}
func (f *Frame) GenTimeInt(year, month, day, hour, min, sec int) int64 {
return int64(time.Date(year, time.Month(month), day, hour, min, sec, 0, time.UTC).Unix())
}
func (f *Frame) Beginning(num int64, types int64) int64 {
if num < 1 {
num = 1
}
return f.Time - (f.Time % (num * types))
}
func (f *Frame) BeginningOfDay(day int64) int64 {
return f.Beginning(day, SecondPerDay)
}
func (f *Frame)BeginningOfHour(hour int64) int64 {
return f.Beginning(hour, SecondPerHour)
}
func (f *Frame)BeginningOfTheWeek() int64 {
beginnigOfTheDay := f.Time - (f.Time % SecondPerDay)
weekday := f.TimeCommon.Weekday()
return beginnigOfTheDay - int64(weekday)*SecondPerDay
}
func (f *Frame)BeginningOfLastWeek() int64 {
beginnigOfTheDay := f.Time - (f.Time % SecondPerDay)
offsetday := f.TimeCommon.Weekday() + 7
return beginnigOfTheDay - int64(offsetday)*SecondPerDay
}
func (f *Frame)BeginningOfTheChineseWeek() int64 {
beginnigOfTheDay := f.BeginningOfTheDay()
weekday := f.TimeCommon.Weekday()
if weekday == time.Sunday {
weekday = 7
}
return beginnigOfTheDay - int64(weekday-1)*SecondPerDay
}
func (f *Frame)BeginningOfTheMonth() int64 {
beginnigOfTheDay := f.Time - (f.Time % SecondPerDay)
monthDay := f.TimeCommon.Day()
return beginnigOfTheDay - int64(monthDay-1)*SecondPerDay
}
func (f *Frame)EndingOfTheWeek() int64 {
return f.BeginningOfTheWeek() + SecondPerWeek
}
func (f *Frame)EndingOfTheMonth() int64 {
nextMonth := f.TimeCommon.AddDate(0, 1, -f.TimeCommon.Day()).Unix()
return nextMonth - (nextMonth % SecondPerDay) + SecondPerDay
}
func (f *Frame)EndingOfHour() int64 {
return f.Time - (f.Time % SecondPerHour) + SecondPerHour
}
func (f *Frame)EndOfDuration(duration int64) int64 {
return f.Time - (f.Time % duration) + duration
}
func (f *Frame)ThisDayAt(h, m, s uint8) int64 {
at := f.BeginningOfTheDay()
if h >= 24 || m >= 60 || h > 60 {
return at
}
return at + int64(h)*3600 + int64(m)*60 + int64(s)
}
func (f *Frame)IsAtSameDay(t1, t2 int64) bool {
t1DayStartTime := t1 - (t1 % SecondPerDay)
t2DayStartTIme := t2 - (t2 % SecondPerDay)
return t1DayStartTime == t2DayStartTIme
}
go 时间工具
最新推荐文章于 2023-05-14 08:31:32 发布