Página 1 de 1

Obtener milisegundos

NotaPublicado: 2012-02-16 07:39 @361
por princi
Hola, nuevamente pidiendo ayuda. En este caso tengo que hacer algo como esto
hhmm.jpg
hhmm.jpg (12.15 KiB) Visto 1558 veces

pero no sé cómo obtener los milisegundos.
El código es el siguiente:
#!C:\Perl\bin\perl.exe

use diagnostics;
use strict;
use warnings;
use File::Find;

my $dir = "C:\\Files";

find(\&fecha, $dir);

sub fecha
{
our $fila;
our $origen;
our @elem;

my $elemento = $_;
if($elemento=~ /\.dat$/)
{
our $yr;
our $mo;
our $mday;
our $hr;
our $mi;
our $se;
our $mil;
print " el elemento es: $elemento \n";
my $fi = $elemento;
open FI, "$fi";
$fila = <FI>;
@elem = split(/\s+/,$fila);
print " hora $elem[3] \n";
$origen = $elem[3];
my @utc = gmtime($origen);
print "utc : @utc \n";
$yr = sprintf "%4d",$utc[5]+1900;
$mo = sprintf "%02d",$utc[4] + 1;
$mday = sprintf "%02d",$utc[3];
$hr = sprintf "%02d",$utc[2];
$mi = sprintf "%02d",$utc[1];
$se = sprintf "%4.1f",$utc[0];
print "$hr$mi $se \n";
}
close FI;
}

pero me muestra:
HRMM SECON
1150 27.0

Desde ya agradezco su ayuda, ya que es muy importante que pueda obtener los milisegundos.
¡Muchas gracias!
¡Saludos!

Re: Obtener milisegundos

NotaPublicado: 2012-02-16 07:58 @373
por explorer
El valor de tiempo lo estás obteniendo con gmtime() desde la cuarta columna, de la primera fila, de cada fichero que File::Find encuentra.

Tanto gmtime() como localtime() devuelven los componentes de tiempo, pero con precisión de segundos.

No sabemos qué aspecto tienen esos ficheros, así que no podemos saber si contienen información suficiente como para deducir el número de milisegundos.

¿No será que tienes que poner un decimal más en el sprintf de $se?

Re: Obtener milisegundos

NotaPublicado: 2012-02-16 08:42 @404
por princi
Los ficheros tienen este aspecto:
fichero.png
fichero.png (14.75 KiB) Visto 1555 veces

donde la cuarta componente es lo que quiero convertir a HRMM SECOND, pero en second siempre me muestra ss.0.
Quizás me esté equivocando en la forma de trabajar.
¡Muchas Gracias!
¡Saludos!

Re: Obtener milisegundos

NotaPublicado: 2012-02-16 09:00 @416
por explorer
El problema, entonces, está en el uso de gmtime(): al pasarle la cifra, la redondea a segundos.

Lo que tienes que hacer es, o bien usar otro módulo que sepa tratar tiempos con parte fraccionaria, o tratar por una parte, la parte entera, con gmtime, y luego la parte fraccionaria. Esta última la puedes usar, de forma directa, como los milisegundos que quieres mostrar.