def next_time(now=Time.now)
time = @timezone ? @timezone.utc_to_local(now.getutc) : now
time = time - time.usec * 1e-6 + 1
loop do
unless date_match?(time)
time += (24 - time.hour) * 3600 - time.min * 60 - time.sec
next
end
unless sub_match?(time.hour, @hours)
time += (60 - time.min) * 60 - time.sec
next
end
unless sub_match?(time.min, @minutes)
time += 60 - time.sec
next
end
unless sub_match?(time.sec, @seconds)
time += 1
next
end
break
end
if @timezone
time = @timezone.local_to_utc(time)
time = time.getlocal unless now.utc?
end
time
end