vRp.CD2g_test/utils/times
kercylan98 92d6c5680d feat: times 包新增 GetWeekdayDateRelativeToNowWithOffset 及 GetWeekdayTimeRelativeToNowWithOffset 函数,用于取代 GetCurrWeekDate 和 GetLastWeekDate 函数 2024-03-18 12:39:26 +08:00
..
README.md docs: 优化 README.md 可读性 2024-01-15 17:27:02 +08:00
calc.go feat: 支持通过 timer.CalcNextTimeWithRefer 计算下一个整点时间 2023-07-18 18:25:21 +08:00
calc_example_test.go test: 新增 times.CalcNextSecWithTime 示例代码 2023-09-20 17:21:16 +08:00
format.go fix: 修复 geometry 包 SimpleCircle.Projection 函数不正确的问题。优化部分注释及添加部分函数 2024-03-04 17:56:36 +08:00
helper.go feat: times 包新增 GetWeekdayDateRelativeToNowWithOffset 及 GetWeekdayTimeRelativeToNowWithOffset 函数,用于取代 GetCurrWeekDate 和 GetLastWeekDate 函数 2024-03-18 12:39:26 +08:00
helper_test.go feat: times 包新增 GetWeekdayDateRelativeToNowWithOffset 及 GetWeekdayTimeRelativeToNowWithOffset 函数,用于取代 GetCurrWeekDate 和 GetLastWeekDate 函数 2024-03-18 12:39:26 +08:00
line.go refactor: 移除 slice 包和 hash 包,新增 listings、mappings 包存放数组、切片、映射等数据结构,原 slice、hash 包中的工具函数迁移至 collection 包,与 sher 包合并并移除 sher 包。完善 collection 包测试用例 2024-01-11 17:50:04 +08:00
line_test.go other: 示例及 buffer README.md 更新 2023-12-23 18:16:01 +08:00
offset.go feat: times 包支持重置全局时间偏移量和获取当前全局时间偏移量 2023-11-10 12:35:19 +08:00
offset_test.go feat: times 包支持设置全局时间偏移 2023-11-10 12:15:18 +08:00
period.go feat: super 包支持通过 MarshalToTargetWithJSON 将对象通过 JSON 序列化为目标对象 2023-10-07 10:34:05 +08:00
period_test.go feat: timer 包新增部分获取 分、日、月、年 开始结束时间函数,以及快捷创建时间窗口时间段的函数 2023-09-23 11:25:46 +08:00
times.go feat: server.New 支持通过 server.WithWebsocketReadDeadline 设置超时时间 2023-07-05 13:52:11 +08:00

README.md

Times

Go doc

暂无介绍...

目录导航

列出了该 package 下所有的函数及类型定义,可通过目录导航进行快捷跳转 ❤️

展开 / 折叠目录导航

包级函数定义

函数名称 描述
CalcNextSec 计算下一个N秒在多少秒之后
CalcNextSecWithTime 计算下一个N秒在多少秒之后
CalcNextTimeWithRefer 根据参考时间计算下一个整点时间
IntervalFormatSet 针对 IntervalFormat 函数设置格式化内容
IntervalFormat 返回指定时间戳之间的间隔
GetMonthDays 获取一个时间当月共有多少天
WeekDay 获取一个时间是星期几
GetNextDayInterval 获取一个时间到下一天间隔多少秒
GetToday 获取一个时间的今天
GetSecond 获取共有多少秒
IsSameDay 两个时间是否是同一天
IsSameHour 两个时间是否是同一小时
GetMondayZero 获取本周一零点
Date 返回一个特定日期的时间
DateWithHMS 返回一个精确到秒的时间
GetDeltaDay 获取两个时间需要加减的天数
GetDeltaWeek 获取两个时间需要加减的周数
GetHSMFromString 从时间字符串中获取时分秒
GetTimeFromString 将时间字符串转化为时间
GetDayZero 获取 t 增加 day 天后的零点时间
GetYesterday 获取昨天
GetDayLast 获取某天的最后一刻
GetYesterdayLast 获取昨天最后一刻
GetMinuteStart 获取一个时间的 0 秒
GetMinuteEnd 获取一个时间的 59 秒
GetHourStart 获取一个时间的 0 分 0 秒
GetHourEnd 获取一个时间的 59 分 59 秒
GetMonthStart 获取一个时间的月初
GetMonthEnd 获取一个时间的月末
GetYearStart 获取一个时间的年初
GetYearEnd 获取一个时间的年末
NewStateLine 创建一个从左向右由早到晚的状态时间线
SetGlobalTimeOffset 设置全局时间偏移量
NowByNotOffset 获取未偏移的当前时间
GetGlobalTimeOffset 获取全局时间偏移量
ResetGlobalTimeOffset 重置全局时间偏移量
NewPeriod 创建一个时间段
NewPeriodWindow 创建一个特定长度的时间窗口
NewPeriodWindowWeek 创建一周长度的时间窗口,从周一零点开始至周日 23:59:59 结束
NewPeriodWithTimeArray 创建一个时间段
NewPeriodWithDayZero 创建一个时间段,从 t 开始,持续到 day 天后的 0 点
NewPeriodWithDay 创建一个时间段,从 t 开始,持续 day 天
NewPeriodWithHour 创建一个时间段,从 t 开始,持续 hour 小时
NewPeriodWithMinute 创建一个时间段,从 t 开始,持续 minute 分钟
NewPeriodWithSecond 创建一个时间段,从 t 开始,持续 second 秒
NewPeriodWithMillisecond 创建一个时间段,从 t 开始,持续 millisecond 毫秒
NewPeriodWithMicrosecond 创建一个时间段,从 t 开始,持续 microsecond 微秒
NewPeriodWithNanosecond 创建一个时间段,从 t 开始,持续 nanosecond 纳秒

类型定义

类型 名称 描述
STRUCT StateLine 状态时间线
STRUCT Period 表示一个时间段

详情信息

func CalcNextSec(sec int) int

计算下一个N秒在多少秒之后


func CalcNextSecWithTime(t time.Time, sec int) int

计算下一个N秒在多少秒之后

示例代码:


func ExampleCalcNextSecWithTime() {
	now := time.Date(2023, 9, 20, 0, 0, 3, 0, time.Local)
	fmt.Println(times.CalcNextSecWithTime(now, 10))
}


func CalcNextTimeWithRefer(now time.Time, refer time.Duration) time.Time

根据参考时间计算下一个整点时间

  • 假设当 now 为 14:15:16 参考时间为 10 分钟, 则返回 14:20:00
  • 假设当 now 为 14:15:16 参考时间为 20 分钟, 则返回 14:20:00

当 refer 小于 1 分钟时,将会返回当前时间


func IntervalFormatSet(intervalType int, str string)

针对 IntervalFormat 函数设置格式化内容


func IntervalFormat(time1 time.Time, time2 time.Time) string

返回指定时间戳之间的间隔

  • 使用传入的时间进行计算换算,将结果体现为几年前、几天前、几小时前、几分钟前、几秒前。

func GetMonthDays(t time.Time) int

获取一个时间当月共有多少天


func WeekDay(t time.Time) int

获取一个时间是星期几

  • 1 ~ 7

func GetNextDayInterval(t time.Time) time.Duration

获取一个时间到下一天间隔多少秒


func GetToday(t time.Time) time.Time

获取一个时间的今天


func GetSecond(d time.Duration) int

获取共有多少秒


func IsSameDay(t1 time.Time, t2 time.Time) bool

两个时间是否是同一天


func IsSameHour(t1 time.Time, t2 time.Time) bool

两个时间是否是同一小时


func GetMondayZero(t time.Time) time.Time

获取本周一零点


func Date(year int, month time.Month, day int) time.Time

返回一个特定日期的时间


func DateWithHMS(year int, month time.Month, day int, hour int, min int, sec int) time.Time

返回一个精确到秒的时间


func GetDeltaDay(t1 time.Time, t2 time.Time) int

获取两个时间需要加减的天数


func GetDeltaWeek(t1 time.Time, t2 time.Time) int

获取两个时间需要加减的周数


func GetHSMFromString(timeStr string, layout string) (hour int, min int, sec int)

从时间字符串中获取时分秒


func GetTimeFromString(timeStr string, layout string) time.Time

将时间字符串转化为时间


func GetDayZero(t time.Time, day int) time.Time

获取 t 增加 day 天后的零点时间


func GetYesterday(t time.Time) time.Time

获取昨天


func GetDayLast(t time.Time) time.Time

获取某天的最后一刻

  • 最后一刻即 23:59:59

func GetYesterdayLast(t time.Time) time.Time

获取昨天最后一刻


func GetMinuteStart(t time.Time) time.Time

获取一个时间的 0 秒


func GetMinuteEnd(t time.Time) time.Time

获取一个时间的 59 秒


func GetHourStart(t time.Time) time.Time

获取一个时间的 0 分 0 秒


func GetHourEnd(t time.Time) time.Time

获取一个时间的 59 分 59 秒


func GetMonthStart(t time.Time) time.Time

获取一个时间的月初


func GetMonthEnd(t time.Time) time.Time

获取一个时间的月末


func GetYearStart(t time.Time) time.Time

获取一个时间的年初


func GetYearEnd(t time.Time) time.Time

获取一个时间的年末


func NewStateLine[State generic.Basic](zero State) *StateLine[State]

创建一个从左向右由早到晚的状态时间线

查看 / 收起单元测试

func TestNewStateLine(t *testing.T) {
	sl := times.NewStateLine(0)
	sl.AddState(1, time.Now())
	sl.AddState(2, time.Now().Add(-times.Hour))
	sl.Range(func(index int, state int, ts time.Time) bool {
		t.Log(index, state, ts)
		return true
	})
	t.Log(sl.GetStateByTime(time.Now()))
}


func SetGlobalTimeOffset(offset time.Duration)

设置全局时间偏移量

查看 / 收起单元测试

func TestSetGlobalTimeOffset(t *testing.T) {
	fmt.Println(time.Now())
	times.SetGlobalTimeOffset(-times.Hour)
	fmt.Println(time.Now())
	times.SetGlobalTimeOffset(times.Hour)
	fmt.Println(time.Now())
	fmt.Println(times.NowByNotOffset())
}


func NowByNotOffset() time.Time

获取未偏移的当前时间


func GetGlobalTimeOffset() time.Duration

获取全局时间偏移量


func ResetGlobalTimeOffset()

重置全局时间偏移量


func NewPeriod(start time.Time, end time.Time) Period

创建一个时间段

  • 如果 start 比 end 晚,则会自动交换两个时间

func NewPeriodWindow(t time.Time, size time.Duration) Period

创建一个特定长度的时间窗口

查看 / 收起单元测试

func TestNewPeriodWindow(t *testing.T) {
	cur := time.Now()
	fmt.Println(cur)
	window := times.NewPeriodWindow(cur, times.Day)
	fmt.Println(window)
}


func NewPeriodWindowWeek(t time.Time) Period

创建一周长度的时间窗口,从周一零点开始至周日 23:59:59 结束


func NewPeriodWithTimeArray(times [2]time.Time) Period

创建一个时间段


func NewPeriodWithDayZero(t time.Time, day int) Period

创建一个时间段,从 t 开始,持续到 day 天后的 0 点


func NewPeriodWithDay(t time.Time, day int) Period

创建一个时间段,从 t 开始,持续 day 天


func NewPeriodWithHour(t time.Time, hour int) Period

创建一个时间段,从 t 开始,持续 hour 小时


func NewPeriodWithMinute(t time.Time, minute int) Period

创建一个时间段,从 t 开始,持续 minute 分钟


func NewPeriodWithSecond(t time.Time, second int) Period

创建一个时间段,从 t 开始,持续 second 秒


func NewPeriodWithMillisecond(t time.Time, millisecond int) Period

创建一个时间段,从 t 开始,持续 millisecond 毫秒


func NewPeriodWithMicrosecond(t time.Time, microsecond int) Period

创建一个时间段,从 t 开始,持续 microsecond 微秒


func NewPeriodWithNanosecond(t time.Time, nanosecond int) Period

创建一个时间段,从 t 开始,持续 nanosecond 纳秒


StateLine STRUCT

状态时间线

type StateLine[State generic.Basic] struct {
	states  []State
	points  []time.Time
	trigger [][]func()
}

func (*StateLine) Check(missingAllowed bool, states ...State) bool

根据状态顺序检查时间线是否合法

  • missingAllowed: 是否允许状态缺失,如果为 true则状态可以不连续如果为 false则状态必须连续

状态不连续表示时间线中存在状态缺失,例如:

  • 状态为 [1, 2, 3, 4, 5] 的时间线,如果 missingAllowed 为 true则状态为 [1, 3, 5] 也是合法的
  • 状态为 [1, 2, 3, 4, 5] 的时间线,如果 missingAllowed 为 false则状态为 [1, 3, 5] 是不合法的

func (*StateLine) GetMissingStates(states ...State) []State

获取缺失的状态


func (*StateLine) HasState(state State) bool

检查时间线中是否包含指定状态


func (*StateLine) String() string

获取时间线的字符串表示


func (*StateLine) AddState(state State, t time.Time, onTrigger ...func ()) *StateLine[State]

添加一个状态到时间线中,状态不能与任一时间点重合,否则将被忽略

  • onTrigger: 该状态绑定的触发器,该触发器不会被主动执行,需要主动获取触发器执行

func (*StateLine) GetTimeByState(state State) time.Time

获取指定状态的时间点


func (*StateLine) GetNextTimeByState(state State) time.Time

获取指定状态的下一个时间点


func (*StateLine) GetLastState() State

获取最后一个状态


func (*StateLine) GetPrevTimeByState(state State) time.Time

获取指定状态的上一个时间点


func (*StateLine) GetIndexByState(state State) int

获取指定状态的索引


func (*StateLine) GetStateByTime(t time.Time) State

获取指定时间点的状态


func (*StateLine) GetTimeByIndex(index int) time.Time

获取指定索引的时间点


func (*StateLine) Move(d time.Duration) *StateLine[State]

时间线整体移动


func (*StateLine) GetNextStateTimeByIndex(index int) time.Time

获取指定索引的下一个时间点


func (*StateLine) GetPrevStateTimeByIndex(index int) time.Time

获取指定索引的上一个时间点


func (*StateLine) GetStateIndexByTime(t time.Time) int

获取指定时间点的索引


func (*StateLine) GetStateCount() int

获取状态数量


func (*StateLine) GetStateByIndex(index int) State

获取指定索引的状态


func (*StateLine) GetTriggerByTime(t time.Time) []func ()

获取指定时间点的触发器


func (*StateLine) GetTriggerByIndex(index int) []func ()

获取指定索引的触发器


func (*StateLine) GetTriggerByState(state State) []func ()

获取指定状态的触发器


func (*StateLine) AddTriggerToState(state State, onTrigger ...func ()) *StateLine[State]

给指定状态添加触发器


func (*StateLine) Range(handler func (index int, state State, t time.Time) bool)

按照时间顺序遍历时间线


func (*StateLine) RangeReverse(handler func (index int, state State, t time.Time) bool)

按照时间逆序遍历时间线


Period STRUCT

表示一个时间段

type Period [2]time.Time

func (Period) Start() time.Time

返回时间段的开始时间


func (Period) End() time.Time

返回时间段的结束时间


func (Period) Duration() time.Duration

返回时间段的持续时间


func (Period) Day() int

返回时间段的持续天数


func (Period) Hour() int

返回时间段的持续小时数


func (Period) Minute() int

返回时间段的持续分钟数


func (Period) Seconds() int

返回时间段的持续秒数


func (Period) Milliseconds() int

返回时间段的持续毫秒数


func (Period) Microseconds() int

返回时间段的持续微秒数


func (Period) Nanoseconds() int

返回时间段的持续纳秒数


func (Period) IsZero() bool

判断时间段是否为零值


func (Period) IsInvalid() bool

判断时间段是否无效


func (Period) IsBefore(t time.Time) bool

判断时间段是否在指定时间之前


func (Period) IsAfter(t time.Time) bool

判断时间段是否在指定时间之后


func (Period) IsBetween(t time.Time) bool

判断指定时间是否在时间段之间


func (Period) IsOngoing(t time.Time) bool

判断指定时间是否正在进行时

  • 如果时间段的开始时间在指定时间之前或者等于指定时间,且时间段的结束时间在指定时间之后,则返回 true

func (Period) IsBetweenOrEqual(t time.Time) bool

判断指定时间是否在时间段之间或者等于时间段的开始或结束时间


func (Period) IsBetweenOrEqualPeriod(t Period) bool

判断指定时间是否在时间段之间或者等于时间段的开始或结束时间


func (Period) IsOverlap(t Period) bool

判断时间段是否与指定时间段重叠