Beefy Boxes and Bandwidth Generously Provided by pair Networks
Pathologically Eclectic Rubbish Lister

Format date string

by znoopy (Initiate)
on Apr 26, 2011 at 12:20 UTC ( #901335=perlquestion: print w/replies, xml ) Need Help??
znoopy has asked for the wisdom of the Perl Monks concerning the following question:

Hi! Whats the smoothest way in perl if I want to reformat date/time strings like this: 2011-04-25T17:07:19-07:00 into MySQL format taking into account the -7 hours eg: 2011-04-25 10:07:19 Thanks!

Replies are listed 'Best First'.
Re: Format date string
by mikeraz (Friar) on Apr 26, 2011 at 12:48 UTC

    Use DateTime module. More than well worth the learning curve.

    Be Appropriate && Follow Your Curiosity
Re: Format date string
by thargas (Deacon) on Apr 26, 2011 at 12:52 UTC

    For anything involving dates/times in perl I always look for a module in the DateTime family, especially if it involves time-zones. Sometimes you end up writing a little more code, but the result is correct and the modules work with each other.

    Probably something like DateTime::Format::Strptime for this.

Re: Format date string
by Anonymous Monk on Apr 26, 2011 at 12:53 UTC
    Specifically see, DateTime::Format::MySQL. No matter what you are doing, if it seems to you to be a fairly common thing to do, you can be certain that there is a CPAN module to do it, at Look there first and always.
Re: Format date string
by shivnani_s (Initiate) on Apr 26, 2011 at 15:21 UTC

    following code may help. ;)

    ($Second, $Minute, $Hour, $Day, $Month, $Year, $WeekDay, $DayOfYear, $ +IsDST) = localtime(time); $Year += 1900; $Month++; $date = "$Day/$Month/$Year";
Re: Format date string
by SimonClinch (Deacon) on Apr 26, 2011 at 13:36 UTC
    First parse it using a regexp, e.g.:
    my ($yr,$mth,$day,$hr,$min,$sec,$sgn,$hr2,$min2) = /^(\d+)\-(\d+)\-(\d+)T(\d+)\:(\d+)\:(\d+)(.)(\d+)\:(\d+)$/;
    Then subtract 1900 from the year and 1 from the month. The values are then compatible with localtime() and other library functions for manipulation and formatting.

    One world, one people

Re: Format date string
by Cristoforo (Deacon) on Apr 29, 2011 at 01:48 UTC
    Hello znoopy,
    I think the time zone at the end of the string, -07:00, means this time zone is 7 hours behind (or to the West) of UTC. Then you would need to add the 7 to the hours (giving 2011-04-26 00:07:19)???

    #!/usr/bin/perl use strict; use warnings; use 5.012; use DateTime::Format::Strptime; (my $str = "2011-04-25T17:07:19-07:00") =~ s/:(\d\d)\z/$1/; my( @strp ) = ( DateTime::Format::Strptime->new( pattern => '%FT%T%z', ), DateTime::Format::Strptime->new( pattern => '%F %T', ) ); my $date = $strp[0]->parse_datetime( $str ) or die "Cannot parse $str. + $!"; say $strp[1]->format_datetime( $date->set_time_zone('UTC') ); __END__ C:\Old_Data\perlp>perl 2011-04-26 00:07:19

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://901335]
Approved by Corion
Front-paged by Corion
and the shadows deepen...

How do I use this? | Other CB clients
Other Users?
Others having an uproarious good time at the Monastery: (6)
As of 2017-02-24 20:48 GMT
Find Nodes?
    Voting Booth?
    Before electricity was invented, what was the Electric Eel called?

    Results (363 votes). Check out past polls.