2012-03-05 23 views
10

Quiero mostrar la duración con milisegundos en una página web. Hasta ahora he hecho esto: Me las arreglé para mostrar esta salida en una etiqueta: 00:02:50, pero quiero mostrar milisegundos también, por lo que el resultado debería ser así 00: 02: 50: 000. ¿Cómo logro esto?Duración de la pantalla en milisegundos

Código atrás:

protected void Page_Load(object sender, EventArgs e) 
{ 
    DateTime startTime = DateTime.Now; 
    // sleep for 2.5s 
    Thread.Sleep(2500); 
    DateTime stopTime = DateTime.Now; 
    TimeSpan duration = stopTime - startTime; 
    Result.Text = duration.ToString("mm':'ss':'ff"); 
} 

Respuesta

20

En primer lugar, si está cronometrando las cosas, le recomendaría utilizar la clase StopWatch porque eso es lo que está ahí. Puede encontrarlo en el espacio de nombres System.Diagnostics: System.Diagnostics.Stopwatch.

Puede instanciar uno nuevo y comenzar a medir el tiempo transcurrido con una línea de código: var stop = System.Diagnostics.Stopwatch.StartNew(); y luego detener el temporizador con el método de detención: stop.Stop();. A continuación, puede devolver el tiempo transcurrido utilizando la propiedad Elapsed var elapsed = stop.Elapsed;.

Luego, para mostrar el tiempo transcurrido en milisegundos, debe llamar al método ToString en el intervalo de tiempo transcurrido con los parámetros correctos.

Así que ponerlo todo junto el código se vería así:

protected void Page_Load(object sender, EventArgs e) 
{ 
    var timer = System.Diagnostics.Stopwatch.StartNew(); 
    // sleep for 2.5s 
    Thread.Sleep(2500); 
    timer.Stop(); 
    var elapsed = timer.Elapsed; 
    Result.Text = elapsed.ToString("mm':'ss':'fff"); 
} 

Espero que ayude!

James

+0

Brillante respuesta, de hecho, estoy cronometrando la consulta sql. – fn27

3

El doc says: "FFF" le da:

Los milisegundos en un valor de fecha y hora.

Usted está utilizando "ss" que le ofrece:

Las centésimas de segundo en un valor de fecha y hora.

Por lo tanto, cambiar el código para:

duration.ToString("mm':'ss':'fff"); 
3

Creo que estás confundido. En su caso 00:02:50 significa 2 segundos y 50 centésimas de segundo. Si desea mostrar milisegundos, use el formato como mm':'ss':'fff (observe el que se agregó f). Esto imprimirá algo como 00:02:500, es decir, 2 segundos y 500 milésimas de segundo, o 2 s 500 ms.

Pero esto no significa que sus mediciones serán precisas hasta milisegundos. Eso no es lo que debe hacer DateTime.Now. Si desea hacer mediciones tan precisas, debe usar StopWatch.

+0

Gracias por la aclaración. De hecho, estaba confundido. – fn27

2

De lo contrario sólo tiene que utilizar las propiedades del intervalo de tiempo de esta manera:

var result = String.Format("{0}:{1}:{2}", duration.Minutes, duration.Seconds, duration.Milliseconds); 
Result.Text = result 

De esta manera creo que adquiera más control sobre lo que desea mostrar, en lugar de formatear el espacio de tiempo en el ToString() - Método de la cual más fácilmente permite errores tipográficos ...

Espero que esto ayude!

Actualización: Para añadir las horas y así es como se verá como:

var result = String.Format("{0}:{1}:{2}:{3}", duration.Hours, duration.Minutes, duration.Seconds, duration.Milliseconds); 
4

su código actual debe mostrar minutos, segundos y centésimas de segundo.

Result.Text = duration.ToString("mm':'ss':'ff"); 

Para mostrar milliseonds en lugar de centésimas de segundo:

// output: 00:02:500 
Result.Text = duration.ToString("mm':'ss':'fff"); 

consulte la documentación de Custom Date and Time Format Strings.

2

Uso TimeSpan.ToString Method con formato personalizado.

La cadena devuelta está formateado con el "c" especificador de formato y tiene el siguiente formato:

[-][d.]hh:mm:ss[.fffffff] 

Elementos en corchetes ([y]) pueden no estar incluidos en la cadena devuelta. Los dos puntos y los puntos (: y.) Son caracteres literales.

Result.Text = duration.ToString("mm:ss:fff"); 

o

Result.Text = duration.ToString("hh:mm:ss.fff"); 

Ref: Custom Date and Time Format Strings, The "fff" Custom Format Specifier

DateTime date1 = new DateTime(2008, 8, 29, 19, 27, 15, 18); 
CultureInfo ci = CultureInfo.InvariantCulture; 
Console.WriteLine(date1.ToString("hh:mm:ss.fff", ci)); 
// Displays 07:27:15.018 
Cuestiones relacionadas