Beefy Boxes and Bandwidth Generously Provided by pair Networks
Just another Perl shrine

Re^2: What's "Better" DateTime or localtime?

by mmartin (Monk)
on Jul 17, 2013 at 20:34 UTC ( #1044891=note: print w/replies, xml ) Need Help??

in reply to Re: What's "Better" DateTime or localtime?
in thread What's "Better" DateTime or localtime?

Your a poet and you didn't even know it....

I really just wanted people's opinion on what they liked using "better"...

I decided to use the localtime method/function (*whichever its called) along with the Time::Piece Module.
I found that Module had lots of useful Methods with it. Some that I used include:
    *If $t contains 'localtime', then...
        - $t->sec;
        - $t->min;
        - $t->hour;
        - $t->mon;
        - $t->mday;
        - $t->wday;
        - $t->year;
        - $t->mdy("/");

Those were just some of the Methods I found useful when I was writing my script. I'm sure the other Module/Function has
plenty of similar Methods along with them. But I just found that this one was a bit more useful for myself...


  • Comment on Re^2: What's "Better" DateTime or localtime?

Replies are listed 'Best First'.
Re^3: What's "Better" DateTime or localtime?
by runrig (Abbot) on Jul 17, 2013 at 21:44 UTC
    One thing to watch out for is daylight savings conversions when adding/subtracting days. E.g., this may not work as expected, depending on what day and what time of day it is run (just as if using the builtin localtime):
    use Time::Piece qw(localtime); use Time::Seconds qw(ONE_DAY); my $t = localtime; my $yesterday = $t - ONE_DAY(); my $tomorrow = $t + ONE_DAY(); print "Today: ", $t->ymd(),"\n"; print "Yesterday: ", $yesterday->ymd(),"\n"; print "Tomorrow: ", $tomorrow->ymd(),"\n";
    I have found this sort of mistake in someone's code before (though the code did not use Time::Piece, just plain localtime). One way to be sure of adding or subtracting the correct number of days would be to truncate to the beginning of the day, then add an extra half day, or subtract a half-day less:
    my $t = localtime->strptime(localtime->ymd(), '%Y-%m-%d'); my $yesterday = $t - ( 0.5 * ONE_DAY() ); my $tomorrow = $t + ( 1.5 * ONE_DAY() ); print "Today: ", $t->ymd(),"\n"; print "Yesterday: ", $yesterday->ymd(),"\n"; print "Tomorrow: ", $tomorrow->ymd(),"\n";
    One advantage of DateTime is that it does make it a little easier to get this correct. E.g. in my timezone:
    my $t = localtime->strptime('2013-03-11', '%Y-%m-%d'); my $yesterday = $t - ONE_DAY(); my $tomorrow = $t + ONE_DAY(); print "Today: ", $t->ymd(),"\n"; print "Yesterday: ", $yesterday->ymd(),"\n"; print "Tomorrow: ", $tomorrow->ymd(),"\n"; #Prints: Today: 2013-03-11 Yesterday: 2013-03-09 Tomorrow: 2013-03-12
      Hey runrig, thanks for the reply!

      Cool, good info there, thanks!

      I don't know if its the "best" way to go, but I was using the dates I created using the "Time::Piece" Module, then
      I use the "Date::Manip" module to calculate a future date/time (*or past date if you needed to). The cool thing about
      the Date::manip Module is that you can use human relate-able strings to calculate the date.

      For example, before I added the "Date::Manip" Module, and currently still, I have a Command Line Option that the user inputs when
      executing. Where the value of the argument is in the form of "a number followed by a time-unit". So for instance the
      user could enter any of the following:
              --end-in="2 hours"
              --end-in="3 hrs"
              --end-in="20 min"

      Then after the user executes and after some error checking of the users input, I take the option the user entered, like "30 mins"
      and then use that in the DateCalc Function, which is part of the Date::Manip Module. For the error checking I split the users
      input into a number and a "time_unit", so "30mins" would get split into "30" and "mins", then I check each one.

      So I would then take the current_date calculated by "Time::Piece qw(localtime)" and use that as the first argument to the "DateCalc"
      Function, like so:
      ## Create the 'date manipulation' string for the DateCalc Function: # *The user's input is called $end_timeSpan... my $date_manip = "in $end_timeSpan" # For this example lets say: # $current_time == "07/17/2013 10:30:00" ### Calculate the future date from the $current_date: # *Output from function is in the form: # "2013071811:00:00" --> YYYYMMDDHH:MM:SS my $future_date = DateCalc($current_date,$date_manip) # After running the above & capturing each piece from DateCalc, the # $future_date == "07/17/2013 11:00:00", which would be 30 mins # from the $current_date.

      So that's basically what I'm doing with the Date stuff. There is some other stuff I do with the Date and Time but that above is
      the most important part.

      Thanks again for all the suggestions and info.

      Thanks Again,

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1044891]
LanX "♪..♫ Last night a DJ killed my wife ♪..♫ "
zentara...oO 1 more reason I prefer Perl to Python is I can't believe how long Python takes to compile, and you can't disable the myriad of tests
[LanX]: so that's where you've been the last two years? Compiling Python?
[zentara]: LanX no! I was learning why Krishna made me into a unicorn. :-)

How do I use this? | Other CB clients
Other Users?
Others chilling in the Monastery: (6)
As of 2017-03-30 16:47 GMT
Find Nodes?
    Voting Booth?
    Should Pluto Get Its Planethood Back?

    Results (361 votes). Check out past polls.