Anonymous Monk has asked for the wisdom of the Perl Monks concerning the following question:

Oh wise ones,

I'm in dire need of help in converting the date. I've spent countless minutes trying to solve this dilemma.

I have the following string: Wed Feb 18 2004, 11:03:45 AM EST

What I'm trying to get is the epoch time from it

Any help would be appreciated,

JR

Replies are listed 'Best First'.
Re: Date to Epoch conversion
by duff (Parson) on Feb 24, 2004 at 19:19 UTC

    Here's one way from modules I just happened to have lying around on my system (you'll probably need to get Date::Manip from CPAN though)

    #!/usr/bin/perl -l use Date::Manip; $date = "Wed Feb 18 2004, 11:03:45 AM EST"; print UnixDate(ParseDate($date),"%s");

    I seem to recall that Date::Calc also has a routine to convert from almost any date format to "unix time"

Re: Date to Epoch conversion
by cees (Curate) on Feb 24, 2004 at 19:50 UTC

    Just cause I can't resist showing one more way to handle this :)

    You can use Date::Parse for this as well. The following snippet shows how to go from your string, to a unix timestamp (using Date::Parse::str2time), and back to your string again (using Date::Format::time2str):

    perl -MDate::Format -MDate::Parse -e ' print time2str("%a %h %e %Y, %r %Z", str2time("Wed Feb 18 2004, 11:03:45 AM EST")), $/;'

    - Cees

Re: Date to Epoch conversion
by bear0053 (Hermit) on Feb 24, 2004 at 19:19 UTC
    try using this:
    use Time::Local; my $epoch_secs=timelocal( $sec, $min, $hrs, $dd, $mm-1, $yy);
use DateTime::Format::Strptime;
by PodMaster (Abbot) on Feb 25, 2004 at 14:36 UTC
    #perl C:\dev\LOOSE\datetime.format.pl use DateTime::Format::Strptime; my $Strp = DateTime::Format::Strptime::->new( pattern => '%A %B %d %Y, %r', locale => 'en_US', on_error => 'croak', ); my $dt = $Strp->parse_datetime( 'Wed Feb 18 2004, 11:03:45 AM' ); warn $dt->epoch; $Strp = DateTime::Format::Strptime::->new( pattern => '%A %B %d %Y, %r %Z', locale => 'en_US', on_error => 'croak', ); $dt = $Strp->parse_datetime( 'Wed Feb 18 2004, 11:03:45 AM EST' ); __END__ 1077102225 at C:\dev\LOOSE\datetime.format.pl line 16. The timezone 'EST' is ambiguous. at C:\dev\LOOSE\datetime.format.pl li +ne 24
    How's that for cute ;) perldoc DateTime goes to say: Moreover, these names are not unique. For example, there is an ``EST'' at both -0500 and +1000/+1100..

    MJD says "you can't just make shit up and expect the computer to know what you mean, retardo!"
    I run a Win32 PPM repository for perl 5.6.x and 5.8.x -- I take requests (README).
    ** The third rule of perl club is a statement of fact: pod is sexy.

Re: Date to Epoch conversion
by borisz (Canon) on Feb 24, 2004 at 19:31 UTC
    use HTTP::Date; For your example you need to reoder the year and get rid of AM/PM.
    Boris