I tried the below code to find difference between two dates. It works fine if the day of the month is 2-digit number. But it fails when we have a single-digit day of month(ex:1-9). my code is as below. please help me soon.
#!/usr/bin/perl -w
use strict;
use Time::Local;
my %months = (
Jan => 1,
Feb => 2,
Mar => 3,
Apr => 4,
May => 5,
Jun => 6,
Jul => 7,
Aug => 8,
Sep => 9,
Oct => 10,
Nov => 11,
Dec => 12
);
my $beginning = 'Fri Oct 6 05:54:09 2007';
my $end = 'Fri Oct 6 06:54:09 2007';
my @b = split(/[:\s]/, $beginning);
my @e = split(/[:\s]/, $end);
my $b = timelocal($b[5], $b[4], $b[3], $b[2], $months{$b[1]}-1, $b[-1]);
my $e = timelocal($e[5], $e[4], $e[3], $e[2], $months{$e[1]}-1, $e[-1]);
#my @new = localtime($b);
#printf "%04d%02d%02d\n", $new[5]+1900, $new[4]+1, $new[3];
my $elapsed = $e - $b;
print qq($elapsed seconds elapsed between the two events.\n);
Thanks in advance
The problem is the split.
Taking a section of your code (in blue), and printing out the arguments to timelocal:
my $beginning = 'Fri Oct 6 05:54:09 2007';
my @b = split(/[:\s]/, $beginning);
$, = ', ';
$\ = "\n";
print $b[5], $b[4], $b[3], $b[2], $months{$b[1]}-1, $b[-1];
You get
54,05,6,,9,2007
Notice the ","?
There are two spaces between "Oct" and "6". You need to change your regex:
my $beginning = 'Fri Oct 6 05:54:09 2007';
my @b = split(/[:\s]+/, $beginning);
$, = ', ';
$\ = "\n";
print $b[5], $b[4], $b[3], $b[2], $months{$b[1]}-1, $b[-1];
Which gives you want you want as arguments to timelocal:
09,54,05,6,9,2007
Ok, to be "more accurate" :), the regex should be /:|\s+/ .
Thanks for reply, but when i execute the whole script same error still exists as below:
Argument "" isn't numeric in integer gt (>) at /usr/lib/perl5/5.8.0/Time/Local.pm line 91.
Day '' out of range 1..31 at line 27
---------- Post updated at 10:18 AM ---------- Previous update was at 10:08 AM ----------
Hey M.D.Ludig thanks for your response.
there are two spaces between month and date.
In above example i explicitly mentioned date but in my script am extracting date from date and last commands, so i have 2 spaces there. I would be thankful if u resolve this problem.
Thanks again in adcvance
---------- Post updated at 10:22 AM ---------- Previous update was at 10:18 AM ----------
hey sorry dude, i had put + inside bracket.
Its working fine now.
Thanks a lot