@@ -47,20 +47,17 @@ func NewCronTriggerWithLoc(expression string, location *time.Location) (*CronTri
47
47
if location == nil {
48
48
return nil , illegalArgumentError ("location is nil" )
49
49
}
50
-
51
50
expression = trimCronExpression (expression )
52
51
fields , err := parseCronExpression (expression )
53
52
if err != nil {
54
53
return nil , err
55
54
}
56
-
57
55
lastDefined := - 1
58
56
for i , field := range fields {
59
57
if len (field .values ) > 0 {
60
58
lastDefined = i
61
59
}
62
60
}
63
-
64
61
// full wildcard expression
65
62
if lastDefined == - 1 {
66
63
fields [0 ].values , _ = fillRangeValues (0 , 59 )
@@ -165,37 +162,38 @@ func trimCronExpression(expression string) string {
165
162
func buildCronField (tokens []string ) ([]* cronField , error ) {
166
163
var err error
167
164
fields := make ([]* cronField , 7 )
165
+ // second field
168
166
fields [0 ], err = parseField (tokens [0 ], 0 , 59 )
169
167
if err != nil {
170
168
return nil , err
171
169
}
172
-
170
+ // minute field
173
171
fields [1 ], err = parseField (tokens [1 ], 0 , 59 )
174
172
if err != nil {
175
173
return nil , err
176
174
}
177
-
175
+ // hour field
178
176
fields [2 ], err = parseField (tokens [2 ], 0 , 23 )
179
177
if err != nil {
180
178
return nil , err
181
179
}
182
-
180
+ // day-of-month field
183
181
fields [3 ], err = parseField (tokens [3 ], 1 , 31 )
184
182
if err != nil {
185
183
return nil , err
186
184
}
187
-
185
+ // month field
188
186
fields [4 ], err = parseField (tokens [4 ], 1 , 12 , months )
189
187
if err != nil {
190
188
return nil , err
191
189
}
192
-
190
+ // day-of-week field
193
191
fields [5 ], err = parseField (tokens [5 ], 1 , 7 , days )
194
192
if err != nil {
195
193
return nil , err
196
194
}
197
195
fields [5 ].add (- 1 )
198
-
196
+ // year field
199
197
fields [6 ], err = parseField (tokens [6 ], 1970 , 1970 * 2 )
200
198
if err != nil {
201
199
return nil , err
@@ -209,12 +207,10 @@ func parseField(field string, min, max int, translate ...[]string) (*cronField,
209
207
if len (translate ) > 0 {
210
208
glossary = translate [0 ]
211
209
}
212
-
213
210
// any value
214
211
if field == "*" || field == "?" {
215
212
return & cronField {[]int {}}, nil
216
213
}
217
-
218
214
// simple value
219
215
i , err := strconv .Atoi (field )
220
216
if err == nil {
@@ -223,22 +219,18 @@ func parseField(field string, min, max int, translate ...[]string) (*cronField,
223
219
}
224
220
return nil , invalidCronFieldError ("simple" , field )
225
221
}
226
-
227
222
// list values
228
- if strings .Contains (field , "," ) {
223
+ if strings .ContainsRune (field , listRune ) {
229
224
return parseListField (field , min , max , glossary )
230
225
}
231
-
232
226
// step values
233
- if strings .Contains (field , "/" ) {
227
+ if strings .ContainsRune (field , stepRune ) {
234
228
return parseStepField (field , min , max , glossary )
235
229
}
236
-
237
230
// range values
238
- if strings .Contains (field , "-" ) {
231
+ if strings .ContainsRune (field , rangeRune ) {
239
232
return parseRangeField (field , min , max , glossary )
240
233
}
241
-
242
234
// simple literal value
243
235
if glossary != nil {
244
236
intVal , err := translateLiteral (glossary , field )
@@ -251,11 +243,11 @@ func parseField(field string, min, max int, translate ...[]string) (*cronField,
251
243
return nil , invalidCronFieldError ("literal" , field )
252
244
}
253
245
254
- return nil , cronParseError ("parse error" )
246
+ return nil , cronParseError (fmt . Sprintf ( "invalid field %s" , field ) )
255
247
}
256
248
257
249
func parseListField (field string , min , max int , glossary []string ) (* cronField , error ) {
258
- t := strings .Split (field , "," )
250
+ t := strings .Split (field , string ( listRune ) )
259
251
values , stepValues := extractStepValues (t )
260
252
values , rangeValues := extractRangeValues (values )
261
253
listValues , err := translateLiterals (glossary , values )
@@ -282,7 +274,7 @@ func parseListField(field string, min, max int, glossary []string) (*cronField,
282
274
}
283
275
284
276
func parseRangeField (field string , min , max int , glossary []string ) (* cronField , error ) {
285
- t := strings .Split (field , "-" )
277
+ t := strings .Split (field , string ( rangeRune ) )
286
278
if len (t ) != 2 {
287
279
return nil , invalidCronFieldError ("range" , field )
288
280
}
@@ -306,7 +298,7 @@ func parseRangeField(field string, min, max int, glossary []string) (*cronField,
306
298
}
307
299
308
300
func parseStepField (field string , min , max int , glossary []string ) (* cronField , error ) {
309
- t := strings .Split (field , "/" )
301
+ t := strings .Split (field , string ( stepRune ) )
310
302
if len (t ) != 2 {
311
303
return nil , invalidCronFieldError ("step" , field )
312
304
}
@@ -318,8 +310,8 @@ func parseStepField(field string, min, max int, glossary []string) (*cronField,
318
310
switch {
319
311
case t [0 ] == "*" :
320
312
from = min
321
- case strings .Contains (t [0 ], "-" ):
322
- trange := strings .Split (t [0 ], "-" )
313
+ case strings .ContainsRune (t [0 ], rangeRune ):
314
+ trange := strings .Split (t [0 ], string ( rangeRune ) )
323
315
if len (trange ) != 2 {
324
316
return nil , invalidCronFieldError ("step" , field )
325
317
}
0 commit comments