En Perl, ¿cómo se podría analizar eficientemente el resultado del comando de fecha de Unix, teniendo en cuenta la zona horaria, y también convertir a UTC?¿Cómo puedo convertir la salida de fecha de Unix en varias zonas horarias a UTC, en Perl?
He leído muchas preguntas similares en stackoverflow, pero pocas parecen tener en cuenta el análisis de varias zonas horarias. En su lugar, parece que configuran la zona horaria de forma manual y suponen que permanece fija.
# Example Input Strings:
my @inputs = (
'Tue Oct 12 06:31:48 EDT 2010',
'Tue Oct 12 07:49:54 BST 2010',
);
He intentado lo siguiente en vano:
foreach my $input (@inputs) {
my $t = Time::Piece->strptime($input,
'%a %b %d %T %Z %Y');
print $t->cdate, "\n";
}
Parece que el problema es la zona horaria (% Z). Además, parece que no existe un campo de zona horaria en Time :: Piece, que me obligaría a escribir código personalizado para convertirlo a UTC, lo que parece ... incorrecto.
Contexto: Estoy intentando analizar registros heredados de una variedad de fuentes que usan el comando de fecha de Unix para marcas de tiempo. Idealmente, me gustaría convertir todas las marcas de tiempo a UTC.
Cualquier ayuda sería muy apreciada.
El problema fundamental que tendrá aquí es que las abreviaturas de zona horaria de 3 letras no son únicas. El significado de "EST" depende del país en el que se encuentre. – cjm
Gracias por señalar la ambigüedad. Puedo sustituir lo que sé que es el nombre largo correcto (EST5EDT es correcto para ese registro). Sin embargo, todavía no estoy seguro de cómo capturar la zona horaria sin escribir código personalizado para extraer la zona horaria y luego configurar la zona horaria manualmente en mi módulo de elección (DateTime se ve bastante bien), con la esperanza de asignarme a la cadena correcta. – vlee