@@ -56,7 +56,7 @@ public CronTriggerTests(Date date, TimeZone timeZone) {
56
56
@ Parameters
57
57
public static List <Object []> getParameters () {
58
58
List <Object []> list = new ArrayList <Object []>();
59
- list .add (new Object [] { new Date (), TimeZone .getDefault ( ) });
59
+ list .add (new Object [] { new Date (), TimeZone .getTimeZone ( "PST" ) });
60
60
list .add (new Object [] { new Date (), TimeZone .getTimeZone ("CET" ) });
61
61
return list ;
62
62
}
@@ -694,6 +694,26 @@ public void testMonthSequence() throws Exception {
694
694
assertEquals (calendar .getTime (), date = trigger .nextExecutionTime (context3 ));
695
695
}
696
696
697
+ @ Test
698
+ public void testDaylightSavingMissingHour () throws Exception {
699
+ // This trigger has to be somewhere in between 2am and 3am
700
+ CronTrigger trigger = new CronTrigger ("0 10 2 * * *" , timeZone );
701
+ calendar .set (Calendar .DAY_OF_MONTH , 31 );
702
+ calendar .set (Calendar .MONTH , Calendar .MARCH );
703
+ calendar .set (Calendar .YEAR , 2013 );
704
+ calendar .set (Calendar .HOUR_OF_DAY , 1 );
705
+ calendar .set (Calendar .SECOND , 54 );
706
+ Date date = calendar .getTime ();
707
+ TriggerContext context1 = getTriggerContext (date );
708
+ if (timeZone .equals (TimeZone .getTimeZone ("CET" ))) {
709
+ // Clocks go forward an hour so 2am doesn't exist in CET for this date
710
+ calendar .add (Calendar .DAY_OF_MONTH , 1 );
711
+ }
712
+ calendar .add (Calendar .HOUR_OF_DAY , 1 );
713
+ calendar .set (Calendar .MINUTE , 10 );
714
+ calendar .set (Calendar .SECOND , 0 );
715
+ assertEquals (calendar .getTime (), date = trigger .nextExecutionTime (context1 ));
716
+ }
697
717
698
718
private void assertMatchesNextSecond (CronTrigger trigger , Calendar calendar ) {
699
719
Date date = calendar .getTime ();
0 commit comments