Use DateTime module. More than well worth the learning curve.
Be Appropriate && Follow Your Curiosity
| [reply] [Watch: Dir/Any] |
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.
| [reply] [Watch: Dir/Any] |
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 http://search.cpan.org. Look there first and always. | [reply] [Watch: Dir/Any] |
($Second, $Minute, $Hour, $Day, $Month, $Year, $WeekDay, $DayOfYear, $
+IsDST) = localtime(time);
$Year += 1900;
$Month++;
$date = "$Day/$Month/$Year";
| [reply] [Watch: Dir/Any] [d/l] |
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.
| [reply] [Watch: Dir/Any] [d/l] |
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 t3.pl
2011-04-26 00:07:19
| [reply] [Watch: Dir/Any] [d/l] [select] |