fix issue in gcron, allow special char '?' for day and week pattern

This commit is contained in:
John
2019-02-20 16:24:05 +08:00
parent 6aa1c5b1eb
commit 3e0a975a88
2 changed files with 22 additions and 21 deletions

View File

@ -117,23 +117,23 @@ func newSchedule(pattern string) (*cronSchedule, error) {
schedule.hour = m
}
// 天
if m, err := parseItem(match[4], 1, 31, false); err != nil {
if m, err := parseItem(match[4], 1, 31, true); err != nil {
return nil, err
} else {
schedule.day = m
}
// 周
if m, err := parseItem(match[5], 0, 6, false); err != nil {
return nil, err
} else {
schedule.week = m
}
// 月
if m, err := parseItem(match[6], 1, 12, false); err != nil {
if m, err := parseItem(match[5], 1, 12, false); err != nil {
return nil, err
} else {
schedule.month = m
}
// 周
if m, err := parseItem(match[6], 0, 6, true); err != nil {
return nil, err
} else {
schedule.week = m
}
return schedule, nil
} else {
return nil, errors.New(fmt.Sprintf(`invalid pattern: "%s"`, pattern))
@ -200,14 +200,14 @@ func parseItemValue(value string, valueType byte) (int, error) {
} else {
// 英文字母
switch valueType {
case 'w':
if i, ok := weekMap[strings.ToLower(value)]; ok {
return int(i), nil
}
case 'm':
if i, ok := monthMap[strings.ToLower(value)]; ok {
return int(i), nil
}
case 'w':
if i, ok := weekMap[strings.ToLower(value)]; ok {
return int(i), nil
}
}
}
return 0, errors.New(fmt.Sprintf(`invalid pattern value: "%s"`, value))
@ -234,10 +234,10 @@ func (s *cronSchedule) meet(t time.Time) bool {
if _, ok := s.day[t.Day()]; !ok {
return false
}
if _, ok := s.week[int(t.Weekday())]; !ok {
if _, ok := s.month[int(t.Month())]; !ok {
return false
}
if _, ok := s.month[int(t.Month())]; !ok {
if _, ok := s.week[int(t.Weekday())]; !ok {
return false
}
return true

View File

@ -1,17 +1,18 @@
package main
import (
"fmt"
"github.com/gogf/gf/g/os/gcron"
"github.com/gogf/gf/g/os/glog"
"time"
)
func main() {
cron := gcron.New()
glog.Println("start")
cron.DelayAddOnce(1, "* * * * * *", func() {
glog.Println("run")
})
func test() {
}
func main() {
_, err := gcron.Add("*/10 * * * * ?", test)
fmt.Println(err)
fmt.Println(gcron.Entries())
time.Sleep(10*time.Second)
}