Here is the subroutine. Since our data is only from May 2003 to end of 2008, so I only have one leap year(2008) included. You can add more if you need it.
Hope it helps,
Jing
Code:
###############################################################################
# subroutine formatTime($old_time )
# This subroutine reformat the time string to the time format of ical format
# of "yyyymmddThhmmssZ".
#
##############################################################################
sub formatTime {
my ($old_time) = @_;
my ($new_time, $yr, $mon, $day, $hr, $min, $sec, $tz);
$old_time =~ /(\d{4})\D(\d{2})\D(\d{2})\s(\d{2})\:(\d{2})\:(\d{2})\-(\d{2})/;
$yr = $1;
$mon = $2;
$day = $3;
$hr = $4;
$min = $5;
$sec = $6;
$tz = $7;
$hr += $tz;
#== hour can not larger than 23:
if ($hr> 23) {
$day++;
$hr = $hr - 24;
}
#== month days:
if ($day > 30 && ($mon eq "04" || $mon eq "06" || $mon eq "09" || $mon eq "11")) {
$mon++;
$day = $day - 30;
} elsif ($day > 31 && ($mon eq "01" || $mon eq "03" || $mon eq "05" || $mon eq "07" || $mon eq "08" || $mon eq "10" || $mon eq "12")) {
$mon++;
$day = $day - 31;
} elsif ($day > 28 && $mon eq "02" && $yr ne "2008") {
$mon++;
$day = $day - 28;
} elsif ($day > 29 && $mon eq "02" && $yr eq "2008") {
$mon++;
$day = $day - 29;
}
#== year:
if ($mon > 12) {
$mon = $mon - 12;
$yr++;
}
#== reformat the strings:
if (length($hr) < 2) {
$hr = "0" . $hr;
}
if (length($day) < 2) {
$day = "0" . $day;
}
if (length($mon) < 2) {
$mon = "0" . $mon;
}
#== create the new time string:
$new_time = $yr . $mon . $day . "T" . $hr . $min . $sec . "Z";
return $new_time;
}