long fireMillis = fireTime.getTime();
long startMillis = fireTimeStartDate.getTime();
long secondsAfterStart = (fireMillis - startMillis) / 1000L;
long repeatLong = getRepeatInterval();
Calendar sTime = createCalendarTime(fireTimeStartDate);
IntervalUnit repeatUnit = getRepeatIntervalUnit();
if(repeatUnit.equals(IntervalUnit.SECOND)) {
long jumpCount = secondsAfterStart / repeatLong;
if(secondsAfterStart % repeatLong != 0)
jumpCount++;
sTime.add(Calendar.SECOND, getRepeatInterval() * (int)jumpCount);
fireTime = sTime.getTime();
} else if(repeatUnit.equals(IntervalUnit.MINUTE)) {
long jumpCount = secondsAfterStart / (repeatLong * 60L);
if(secondsAfterStart % (repeatLong * 60L) != 0)
jumpCount++;
sTime.add(Calendar.MINUTE, getRepeatInterval() * (int)jumpCount);
fireTime = sTime.getTime();
} else if(repeatUnit.equals(IntervalUnit.HOUR)) {
long jumpCount = secondsAfterStart / (repeatLong * 60L * 60L);
if(secondsAfterStart % (repeatLong * 60L * 60L) != 0)
jumpCount++;
sTime.add(Calendar.HOUR_OF_DAY, getRepeatInterval() * (int)jumpCount);
fireTime = sTime.getTime();