Beefy Boxes and Bandwidth Generously Provided by pair Networks
Clear questions and runnable code
get the best and fastest answer

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 (Curate) 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 all is quiet...

How do I use this? | Other CB clients
Other Users?
Others studying the Monastery: (6)
As of 2017-11-18 18:37 GMT
Find Nodes?
    Voting Booth?
    In order to be able to say "I know Perl", you must have:

    Results (277 votes). Check out past polls.