Michael Stone:
Anyway, if there was a simple solution someone would have implemented
it by now.
Indeed, that is the case; and it has been around for almost as long as
those 20 years that you have been watching people use the GNU tool. In
2001, Paul Jarc invented a fairly simple notation for such things;
providing what is effectively a mini-language, made out of chaining
programs and using environment variables for variables, with |add|,
|sub|, |min|, |max|, |statfile|, and |match| operators.
* http://code.dogmap.org/runwhen/example/
* http://code.dogmap.org/runwhen/stamp-fmt/
* http://code.dogmap.org/runwhen/
Xe even went through the second-system-effect process of not liking the
first way that xe implemented it.
* http://code.dogmap.org/runwhen/caldelay/
Leаh Neukirchen took the old |caldelay| idea, and turned environment
variables into command-line options.
* https://github.com/chneukirchen/snooze
Although |add n d1s now1s match $now1s ,H=2,M=30 wake statfile started
add $MTAI64N d1H earliest ||max $wake $earliest wake| (which is
effectively a prefix notation which in an infix form would be something
like |$now1s := ||now add d1s ; $||wake := ||$now1s findnextmatching
H=2,M=30 ; $||MTAI64N||:= timestampof started ; $||earliest :=||$MTAI64N
add d1H ; $||wake :=||$wake max $earliest|) is more along the lines that
you were writing about earlier. (One can imagine a pair of date
calculator tools akin to |dc| and |bc| that understand the prefix and
infix forms.)