On Mon, 24 Mar 2003, Joshua Hoblitt wrote:

>       DateTime => sub {
>               my $dt1 = DateTime->now();
>               $dt1->set_time_zone( '-1000' );
>               my $dt2 = DateTime::Format::MySQL->parse_datetime( "2000-05-10 
> 15:15:00" );
>               my $dt_dur = DateTime::Duration->new( days => 4 );
>               $dt1->subtract_duration( $dt_dur );
>               my $cmp = DateTime->compare($dt1, $dt2);
>       },

And this could be sped up.  Move making the duration object out of the
sub, and make it like this:

 my $dt_dur = DateTime::Duration->new( days => -4 );

and inside the sub call add_duration instead.

On my box, and AMD Athlon 1.33 Ghz running Debian unstable, I get:

Compare dates
Benchmark: running Date::Manip, DateTime for at least 5 CPU seconds...
Date::Manip:  5 wallclock secs ( 5.09 usr +  0.00 sys =  5.09 CPU) @ 167.78/s (n=854)
  DateTime:  6 wallclock secs ( 5.28 usr +  0.00 sys =  5.28 CPU) @ 483.90/s (n=2555)
             Rate Date::Manip    DateTime
Date::Manip 168/s          --        -65%
DateTime    484/s        188%          --
Change TZ
Benchmark: running Date::Manip, DateTime for at least 5 CPU seconds...
Date::Manip:  5 wallclock secs ( 5.27 usr +  0.00 sys =  5.27 CPU) @ 356.17/s (n=1877)
  DateTime:  5 wallclock secs ( 5.17 usr +  0.00 sys =  5.17 CPU) @ 802.71/s (n=4150)
             Rate Date::Manip    DateTime
Date::Manip 356/s          --        -56%
DateTime    803/s        125%          --


Looks pretty decent.

I added in another possibility using Date::Calc and Date::Parse (since
Date::Calc's parsing doesn't do times, just dates) like this:

               'Date::Calc and Date::Parse' => sub {
                   my (@dc1) = Date::Calc::Today_and_Now();
                   my (@dc2) =
                       reverse ( ( Date::Parse::strptime( "2000-05-10 15:15:00" ) 
)[0..5] );
                   $dc2[0] += 1900;
                   my $cmp =
                       Date::Calc::Date_to_Time(@dc1) <=> 
Date::Calc::Date_to_Time(@dc2);
               }

And got this:

Compare dates
Benchmark: running Date::Calc and Date::Parse, Date::Manip, DateTime for at least 5 
CPU seconds...
Date::Calc and Date::Parse:  5 wallclock secs ( 5.20 usr +  0.02 sys =  5.22 CPU) @ 
10537.93/s (n=55008)
Date::Manip:  5 wallclock secs ( 5.33 usr +  0.00 sys =  5.33 CPU) @ 166.60/s (n=888)
  DateTime:  6 wallclock secs ( 5.25 usr +  0.01 sys =  5.26 CPU) @ 485.74/s (n=2555)
                              Rate Date::Manip DateTime Date::Calc and Date::Parse
Date::Manip                  167/s          --     -66%                       -98%
DateTime                     486/s        192%       --                       -95%
Date::Calc and Date::Parse 10538/s       6225%    2069%                         --


Of course, Date_to_Time only works for datetimes that fit in your
machine's epoch, and the solution in the Date::Calc docs for doing
non-epoch times is quite ugly.

Nonetheless, it'd still be nice to go faster ;)


-dave

/*=======================
House Absolute Consulting
www.houseabsolute.com
=======================*/

Reply via email to