Beefy Boxes and Bandwidth Generously Provided by pair Networks
Problems? Is your data what you think it is?

How to compare time in perl

by abhishes (Friar)
on Feb 08, 2003 at 17:41 UTC ( #233746=perlquestion: print w/ replies, xml ) Need Help??
abhishes has asked for the wisdom of the Perl Monks concerning the following question:

Hello Perl Monks!

I am parsing a file where I find strings of the following pattern 2003/02/05 17:32:06.179

I am able to extract the year, month, day, hour, minute, second and millisecond from this string using a regular expression.

But if I have two such strings how to find out which of the two is smaller. Is there a speedy way to compare two such strings for time.

Thanks for your help in advance.


Comment on How to compare time in perl
Replies are listed 'Best First'.
Re: How to compare time in perl
by mojotoad (Monsignor) on Feb 08, 2003 at 18:39 UTC
    You don't have to parse the dates. Since the strings are a) constant width and consistently formatted, and b) organized left-to-right in order of granularity, you can simply use a string comparison. Like so:

    #!/usr/bin/perl @data = <DATA>; chomp @data; foreach (sort { $a cmp $b } @data) { print "$_\n"; } __END__ 2003/02/05 17:32:06.179 2003/02/05 17:32:06.159 2003/01/05 17:32:06.179 1999/01/05 17:32:06.179
    When run this prints:
    1999/01/05 17:32:06.179 2003/01/05 17:32:06.179 2003/02/05 17:32:06.159 2003/02/05 17:32:06.179


      The equal width and 0 packing of single digits is vital as this will choke cmp:

      2003/02/05 2:32:06.179 2003/02/05 17:32:06.179 2003/02/05 20:32:06.159



        Even if they aren't to begin with he can normalize them first:
        $time=~s{ #$1 $2 $3 $4 $5 $6 $7 (\d+)/(\d+)/(\d+)\s+(\d+):(\d+):(\d+)\.(\d+) } { sprintf '%04d/%02d/%02d %02d:%02d:%02d.%3d', $1, $2, $3, $4, $5, $6, $7 }xe or die "Failed to normalize '$time'\n";

        --- demerphq
        my friends call me, usually because I'm late....

Re: How to compare time in perl
by valdez (Monsignor) on Feb 08, 2003 at 17:48 UTC

    You can use Date::Calc to parse time strings and compare them.

    Ciao, Valerio

Re: How to compare time in perl
by Nitrox (Chaplain) on Feb 08, 2003 at 17:46 UTC
    Use the site's search to take a peek at existing nodes that cover this.


Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://233746]
Approved by mattriff
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others rifling through the Monastery: (11)
As of 2016-05-06 13:22 GMT
Find Nodes?
    Voting Booth?