Recomendo sempre armazenar datas GMT ou, se isso for realmente inconveniente, datas com informações de fuso horário. Deixar datas não especificadas não é uma boa ideia.
Se você está preso a esse formato de dados, o Perl é uma boa ferramenta para transformar as datas locais em datas GMT e vice-versa.
Analisar HTML com expressões regulares é uma má ideia em geral , mas tudo bem se o formato de entrada for altamente restrito. Na minha resposta, assumirei que as linhas da tabela estão sempre em uma única linha, como em seu exemplo. Se não estiverem, você provavelmente deve usar um analisador de HTML real - HTML::Parser
.
#!/usr/bin/env perl
use warnings;
use POSIX;
# Pass the option -i to import from unix time to local time.
# Without the option, export from local time to unix time.
$import = 0;
if (@ARGV && $ARGV[0] eq "-i") {$import = 1}
while (<STDIN>) {
@F = split m!(<td>.*</td>)!;
# Field 13 contains a potential date.
if ($import && @F >= 13 && $F[13] =~ m!(<td>)([0-9]+)(\.[0-9]*</td>)!) {
# Import unix time to local time
($s,$n,$h,$d,$m,$y,@_tail) = localtime($2);
$F[13] = sprintf "$1%04d-%02d-%02d-$02d.%02d.%02d$3", $y, $m, $d, $h, $n, $s;
}
if (!$import && @F >= 13 && $F[13] =~ m!(<td>)([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)\.([0-9]+)\.([0-9]+)(\.[0-9]*</td>)!) {
# Export local time to unix time
$t = POSIX.mktime($7, $6, $5, $4, $3, $2);
$F[13] = "$1$t$8";
}
$_ = "@F";
}
(Atenção, código não testado!)