Beefy Boxes and Bandwidth Generously Provided by pair Networks
Do you know where your variables are?
 
PerlMonks  

RE: How long 'tween now and then? (Solved!)

by myocom (Deacon)
on Oct 07, 2000 at 03:25 UTC ( #35690=note: print w/ replies, xml ) Need Help??


in reply to How long 'tween now and then?

So I ended up using Date::Manip since we wanted to easily correct for holidays, weekends, etc.

use strict; use Date::Manip; &Date_Init("PersonalCNF=holidays.cnf","TZ=PST8PDT"); my $now = &ParseDate("now"); my $date = &ParseDate($ARGV[0]); $date = &Date_NextWorkDay(&ParseDate($date),0) unless $ARGV[1]; # Anything past the first argument acts as an "override" print &UnixDate($date,"Sleeping until %T on %F.\n"); my $delta = &DateCalc($now,$date); my $secs = &Delta_Format($delta,0,"%sh"); if ($secs < 0) { print "Hey, that's in the past--you can't fool me!\n" +; exit; } print "(that's $secs seconds...)\n"; sleep $secs;

So now one can feed it nearly any date/time format with the following caveats: Days of the week are considered to be days of the *current* week, so you should always use "next <day of week>". Also, it will automagically skip holidays/weekends unless you specify something (anything) as other arguments (i.e., scalar @ARGV > 1).

The reference to holidays.cnf is a customized Date::Manip configuration file with our business holidays in it.

As a little test matrix, I ran the following (with the actual sleeping part commented out, naturally):

C:\sleep>for /F "tokens=*" %x in (testmatrix.txt) do sleepuntil %x

C:\sleep>sleepuntil "8:00 next monday"
Sleeping until 08:00:00 on Monday, October  9, 2000.
(that's 228992 seconds...)

C:\sleep>sleepuntil "14:36:24 tomorrow"
Sleeping until 14:36:24 on Monday, October  9, 2000.
(that's 252775 seconds...)

C:\sleep>sleepuntil "tomorrow" really
Sleeping until 16:23:29 on Saturday, October  7, 2000.
(that's 86400 seconds...)

C:\sleep>sleepuntil "4th thursday in november"
Sleeping until 00:00:00 on Monday, November 27, 2000.
(that's 4433790 seconds...)

C:\sleep>sleepuntil "4th thursday in november" even if it's Thanksgiving
Sleeping until 00:00:00 on Thursday, November 23, 2000.
(that's 4088190 seconds...)

C:\sleep>sleepuntil "yesterday"
Sleeping until 16:23:31 on Thursday, October  5, 2000.
Hey, that's in the past--you can't fool me!

C:\sleep>sleepuntil "2pm Dec 1, 2006"
Sleeping until 14:00:00 on Friday, December  1, 2006.
(that's 194132189 seconds...)

...and as you can see, it works beautimously. :-)


Comment on RE: How long 'tween now and then? (Solved!)
Select or Download Code

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://35690]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others surveying the Monastery: (5)
As of 2015-07-05 23:18 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (68 votes), past polls