no need for NoMatch(), existing time.IsZero() does the job well
This commit is contained in:
parent
d3a85f92d8
commit
ae9c090812
12
README.md
12
README.md
|
@ -88,13 +88,13 @@ to create a `CronExpression` object once and keep a copy of it for reuse:
|
||||||
nextTime := cronexpr.NextTime(time.Now())
|
nextTime := cronexpr.NextTime(time.Now())
|
||||||
...
|
...
|
||||||
|
|
||||||
Use `cronexpression.NoMatch()` to find out whether a valid time was returned. For example,
|
Use `nextTime.IsZero()` to find out whether a valid time was returned. For example,
|
||||||
|
|
||||||
cronexpression.NoMatch(cronexpression.NextTime("* * * * * 1980", time.Now()))
|
cronexpression.NextTime("* * * * * 1980", time.Now()).IsZero()
|
||||||
|
|
||||||
will return `true`, whereas
|
will return `true`, whereas
|
||||||
|
|
||||||
cronexpression.NoMatch(cronexpression.NextTime("* * * * * 2050", time.Now()))
|
cronexpression.NextTime("* * * * * 2050", time.Now()).IsZero()
|
||||||
|
|
||||||
will return `false` (as of 2013-08-29...)
|
will return `false` (as of 2013-08-29...)
|
||||||
|
|
||||||
|
@ -143,9 +143,3 @@ Given a time stamp `fromTime`, return the closest following time stamp which mat
|
||||||
|
|
||||||
Given a time stamp `fromTime`, return a slice of `n` closest following time stamps which match the cron expression `cronexpr`. The time stamps in the returned slice are in chronological ascending order. The `time.Location` of the returned time stamps is the same as `fromTime`.
|
Given a time stamp `fromTime`, return a slice of `n` closest following time stamps which match the cron expression `cronexpr`. The time stamps in the returned slice are in chronological ascending order. The `time.Location` of the returned time stamps is the same as `fromTime`.
|
||||||
|
|
||||||
#### func NoMatch
|
|
||||||
|
|
||||||
func NoMatch(t time.Time) bool
|
|
||||||
|
|
||||||
Returns `true` if time stamp `t` is not a valid time stamp from `CronExpression` point of view. An invalid time stamp is returned by this library whenever no matching time stamp is found given a specific cron expression.
|
|
||||||
|
|
||||||
|
|
|
@ -45,10 +45,6 @@ type CronExpression struct {
|
||||||
|
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
|
|
||||||
var noMatchTime = time.Date(2100, 7, 1, 0, 0, 0, 0, time.UTC)
|
|
||||||
|
|
||||||
/******************************************************************************/
|
|
||||||
|
|
||||||
// NewCronExpression() returns a new CronExpression pointer. It expects
|
// NewCronExpression() returns a new CronExpression pointer. It expects
|
||||||
// a well-formed cron expression. If a malformed cron expression is
|
// a well-formed cron expression. If a malformed cron expression is
|
||||||
// supplied, the result is undefined.
|
// supplied, the result is undefined.
|
||||||
|
@ -127,7 +123,7 @@ func NextTimeN(cronLine string, fromTime time.Time, n int) []time.Time {
|
||||||
// time stamp is the same as `fromTime`.
|
// time stamp is the same as `fromTime`.
|
||||||
func (cronexpr *CronExpression) NextTime(fromTime time.Time) time.Time {
|
func (cronexpr *CronExpression) NextTime(fromTime time.Time) time.Time {
|
||||||
// Special case
|
// Special case
|
||||||
if NoMatch(fromTime) {
|
if fromTime.IsZero() {
|
||||||
return fromTime
|
return fromTime
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -145,7 +141,7 @@ func (cronexpr *CronExpression) NextTime(fromTime time.Time) time.Time {
|
||||||
v := fromTime.Year()
|
v := fromTime.Year()
|
||||||
i := sort.SearchInts(cronexpr.yearList, v)
|
i := sort.SearchInts(cronexpr.yearList, v)
|
||||||
if i == len(cronexpr.yearList) {
|
if i == len(cronexpr.yearList) {
|
||||||
return noMatchTime
|
return time.Time{}
|
||||||
}
|
}
|
||||||
if v != cronexpr.yearList[i] {
|
if v != cronexpr.yearList[i] {
|
||||||
return cronexpr.nextYear(fromTime)
|
return cronexpr.nextYear(fromTime)
|
||||||
|
@ -218,7 +214,7 @@ func (cronexpr *CronExpression) NextTimeN(fromTime time.Time, n int) []time.Time
|
||||||
nextTimes := make([]time.Time, 0)
|
nextTimes := make([]time.Time, 0)
|
||||||
fromTime = cronexpr.NextTime(fromTime)
|
fromTime = cronexpr.NextTime(fromTime)
|
||||||
for {
|
for {
|
||||||
if NoMatch(fromTime) {
|
if fromTime.IsZero() {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
nextTimes = append(nextTimes, fromTime)
|
nextTimes = append(nextTimes, fromTime)
|
||||||
|
@ -233,23 +229,12 @@ func (cronexpr *CronExpression) NextTimeN(fromTime time.Time, n int) []time.Time
|
||||||
|
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
|
|
||||||
// Returns `true` if time stamp `t` is not a valid time stamp from
|
|
||||||
// `CronExpression` point of view. An invalid time stamp is returned by this
|
|
||||||
// library whenever no matching time stamp is found given a specific cron
|
|
||||||
// expression.
|
|
||||||
func NoMatch(t time.Time) bool {
|
|
||||||
// https://en.wikipedia.org/wiki/Cron#CRON_expression: 1970–2099
|
|
||||||
return t.Year() >= 2100
|
|
||||||
}
|
|
||||||
|
|
||||||
/******************************************************************************/
|
|
||||||
|
|
||||||
func (cronexpr *CronExpression) nextYear(t time.Time) time.Time {
|
func (cronexpr *CronExpression) nextYear(t time.Time) time.Time {
|
||||||
// Find index at which item in list is greater or equal to
|
// Find index at which item in list is greater or equal to
|
||||||
// candidate year
|
// candidate year
|
||||||
i := sort.SearchInts(cronexpr.yearList, t.Year()+1)
|
i := sort.SearchInts(cronexpr.yearList, t.Year()+1)
|
||||||
if i == len(cronexpr.yearList) {
|
if i == len(cronexpr.yearList) {
|
||||||
return noMatchTime
|
return time.Time{}
|
||||||
}
|
}
|
||||||
// Year changed, need to recalculate actual days of month
|
// Year changed, need to recalculate actual days of month
|
||||||
cronexpr.actualDaysOfMonthList = cronexpr.calculateActualDaysOfMonth(cronexpr.yearList[i], cronexpr.monthList[0])
|
cronexpr.actualDaysOfMonthList = cronexpr.calculateActualDaysOfMonth(cronexpr.yearList[i], cronexpr.monthList[0])
|
||||||
|
|
Loading…
Reference in New Issue