Please test the new Expire Binding

An other alternative to the suggestions by @greg and @dan12345 you can use a Timer and persisted date Item.

See Design Pattern: Encoding and Accessing Values in Rules for how to set your DateTime Item or Individual Alarm clock for each Day of week, with adjustable duration if you want to adjust the date from your sitemap.

Then you just need a System started Rule:

var Timer yearLongTimer = null

rule "Reset timer"
when
    System started
then
    yearLongTimer = createTimer(new DateTime(TimerItem.state.toString), [ |
        // do stuff when timer expires
    ])
end

Then you don’t have to poll and the event will occur exactly at the right time.

Note, you can use this same approach for Expire based timers, however, when OH restarts and you have a System started rule to reset the Expire timers, the time starts over so if you had a timer about to go off after 5 minutes, OH restarts and this System started Rule runs, it would reset the Expire binding to the full five minutes.

That often doesn’t matter but in this case it would. You could have OH running for 6 months and then it restarts and now the Expire timer would get reset for another year.