Unix: sleep until the specified time
If you're on a Unix that has a decent date command and are using bash, you could use the %s
format for calculating time.
sleep $(( $(date -j 1700 +%s) - $(date +%s) ))
-
1700
being 5PM. -
-j
telling date not to actually set the date.
How about this (combining w00t's and Gille's ideas into a function)?
function sleep_until {
seconds=$(( $(date -d "$*" +%s) - $(date +%s) )) # Use $* to eliminate need for quotes
echo "Sleeping for $seconds seconds"
sleep $seconds
}
Usage:
sleep_until 8:24
Sleeping for 35 seconds
sleep_until '23:00'
Sleeping for 52489 seconds
sleep_until 'tomorrow 1:00'
Sleeping for 59682 seconds
Check out the linux/unix at
command. Using the 5AM example:
at 05:00 some_command
It also supports timezones:
A timezone name of GMT, UCT or ZULU (case insensitive) can follow to specify that the time is in Coordinated Universal Time. Other timezones can be specified using the TZ environment variable.