You could have a rule that is constantly keeping track of the time. Then your rule can just check for that time to fire. I used milliseconds for simplicity sake, but I think you can see how it can be adapted to whatever you want. To solve your firing issue every second issue, adapt the Time class to use Calendar objects or something along those lines. Just initialize your knowledge session with a Time object.
rule "update time"
when
$time : Time(value != currentTime)
then
modify($time){
setValue($time.getCurrentTime());
};
end
rule "X"
when
Time(value = //whatever time)
then
// do something
end
public class Time
{
long value;
public Time()
{
value = getCurrentTime();
}
//getter and setter for value
public long getCurrentTime()
{
return System.currentTimeMilliSeconds();
}
}