http://www.perlmonks.org?node_id=258734


in reply to Converting datetime string to valid localtime value (seconds)

Hope fully this helps.
#!/usr/local/bin/perl use strict; use Date::Manip; my $line = qq{1.2.3.4 - - [15/May/2003:01:05:02 -0600] "GET /foobar"}; my $date = ''; if ($line =~ /\[([^\]]+)\]/) { $date = $1; } my $secs = UnixDate(ParseDate($date),"%s"); print "$secs\n"; print localtime($secs)."\n";
You can also throw the DateCalc sub in there for your time zone.

UPDATE: Better solution

$Date::Manip::TZ = '-0800'; my $line = qq{1.2.3.4 - - [15/May/2003:01:05:02 -0600] "GET /foobar"}; my $date = ''; if ($line =~ /\[([^\]]+)\]/) { $date = $1; } my $tz = (split(/\s+/,$date))[1]; print "$date $tz\n"; my $secs = UnixDate(Date_ConvTZ(ParseDate($date),$tz,'GMT' ),"%s"); print "$secs\n"; print localtime($secs)."\n";


grep
Mynd you, mønk bites Kan be pretti nasti...

Replies are listed 'Best First'.
Re: Re: Converting datetime string to valid localtime value (seconds)
by vladb (Vicar) on May 16, 2003 at 18:56 UTC
    grep++, thanks this has worked wonderfully! ;-)

    My code is a prime example of how one should never misuse (or shell I say 'abuse'?) a module for his own good. {grin}

    update:
    Thanks for the timezone conversion code, grep! ;) Although now I run this monitor script on the same server that the primary application (generating the logs) is running on, there's a possiblity of monitoring logs generated on remote servers residing in different time zones. This is when the timezone conversion will become handy.

    _____________________
    "We've all heard that a million monkeys banging on a million typewriters will eventually reproduce
    the entire works of Shakespeare. Now, thanks to the Internet, we know this is not true."

    Robert Wilensky, University of California