diff --git a/spec.go b/spec.go index fa1e241e..75e52b4e 100644 --- a/spec.go +++ b/spec.go @@ -140,8 +140,16 @@ WRAP: added = true t = time.Date(t.Year(), t.Month(), t.Day(), t.Hour(), 0, 0, 0, loc) } + prev := t t = t.Add(1 * time.Hour) - + // ISC cron behavior: If time was adjusted one hour forward, those jobs + // that would have run in the interval that has been skipped will be run + // immediately. + if t.Hour()-prev.Hour() == 2 { + if 1< 0 { + break + } + } if t.Hour() == 0 { goto WRAP } diff --git a/spec_test.go b/spec_test.go index 1b8a503e..61caa323 100644 --- a/spec_test.go +++ b/spec_test.go @@ -111,7 +111,7 @@ func TestNext(t *testing.T) { {"Mon Jul 9 23:35 2012", "0 0 0 29 Feb ?", "Mon Feb 29 00:00 2016"}, // Daylight savings time 2am EST (-5) -> 3am EDT (-4) - {"2012-03-11T00:00:00-0500", "TZ=America/New_York 0 30 2 11 Mar ?", "2013-03-11T02:30:00-0400"}, + {"2012-03-11T00:00:00-0500", "TZ=America/New_York 0 30 2 11 Mar ?", "2012-03-11T03:30:00-0400"}, // hourly job {"2012-03-11T00:00:00-0500", "TZ=America/New_York 0 0 * * * ?", "2012-03-11T01:00:00-0500"}, @@ -129,8 +129,8 @@ func TestNext(t *testing.T) { {"2012-03-11T00:00:00-0500", "TZ=America/New_York 0 0 1 * * ?", "2012-03-11T01:00:00-0500"}, {"2012-03-11T01:00:00-0500", "TZ=America/New_York 0 0 1 * * ?", "2012-03-12T01:00:00-0400"}, - // 2am nightly job (skipped) - {"2012-03-11T00:00:00-0500", "TZ=America/New_York 0 0 2 * * ?", "2012-03-12T02:00:00-0400"}, + // Daylight savings time 2am EST (-5) -> 3am EDT (-4) + {"2012-03-11T00:00:00-0500", "TZ=America/New_York 0 0 2 * * ?", "2012-03-11T03:00:00-0400"}, // Daylight savings time 2am EDT (-4) => 1am EST (-5) {"2012-11-04T00:00:00-0400", "TZ=America/New_York 0 30 2 04 Nov ?", "2012-11-04T02:30:00-0500"},