tag militar milisegundos larga hora formato fecha c# .net format timespan

c# - militar - Convertir milisegundos a tiempo legible por humanos



milisegundos c# (9)

.NET 4 acepta el formato en TimeSpan.Tostring() .

Para otros puedes implementar el método de extensión como

public static string Format(this TimeSpan obj) { StringBuilder sb = new StringBuilder(); if (obj.Hours != 0) { sb.Append(obj.Hours); sb.Append(" "); sb.Append("hours"); sb.Append(" "); } if (obj.Minutes != 0 || sb.Length != 0) { sb.Append(obj.Minutes); sb.Append(" "); sb.Append("minutes"); sb.Append(" "); } if (obj.Seconds != 0 || sb.Length != 0) { sb.Append(obj.Seconds); sb.Append(" "); sb.Append("seconds"); sb.Append(" "); } if (obj.Milliseconds != 0 || sb.Length != 0) { sb.Append(obj.Milliseconds); sb.Append(" "); sb.Append("Milliseconds"); sb.Append(" "); } if (sb.Length == 0) { sb.Append(0); sb.Append(" "); sb.Append("Milliseconds"); } return sb.ToString(); }

y llamar como

foreach (TimeSpan span in spans) { MessageBox.Show(string.Format("{0}", span.Format())); }

Me gustaría formatear algunos tiempos de ejecución de comandos en un formato legible por humanos, por ejemplo:

3 -> 3ms 1100 -> 1s 100ms 62000 -> 1m 2s etc ..

Teniendo en cuenta días, horas, minutos, segundos, ...

¿Es posible usar C# ?


Bueno, normalmente odio escribir declaraciones, pero algunas veces lo que realmente tienes es un clavo y necesito un martillo.

string time; if (elapsedTime.TotalMinutes > 2) time = string.Format("{0:n2} minutes", elapsedTime.TotalMinutes); else if (elapsedTime.TotalSeconds > 15) time = string.Format("{0:n2} seconds", elapsedTime.TotalSeconds); else time = string.Format("{0:n0}ms", elapsedTime.TotalMilliseconds);


Por ejemplo, para obtener 00:01:35.0090000 como 0 horas, 1 minuto, 35 segundos y 9 milisegundos, puede usar esto:

Console.WriteLine("Time elapsed:" +TimeSpan.FromMilliseconds(numberOfMilliseconds).ToString());

Su salida:

Time elapsed: 00:01:35.0090000


Puede utilizar el método estático TimeSpan.FromMilliseconds , así como las propiedades resultantes de los Days , Hours , Minutes , Seconds y Milliseconds TimeSpan .

Pero ahora mismo estoy ocupado, así que te dejaré el resto como ejercicio.



Que hay de esto

var ts = TimeSpan.FromMilliseconds(86300000 /*whatever */); var parts = string .Format("{0:D2}d:{1:D2}h:{2:D2}m:{3:D2}s:{4:D3}ms", ts.Days, ts.Hours, ts.Minutes, ts.Seconds, ts.Milliseconds) .Split('':'') .SkipWhile(s => Regex.Match(s, @"00/w").Success) // skip zero-valued components .ToArray(); var result = string.Join(" ", parts); // combine the result Console.WriteLine(result); // prints ''23h 58m 20s 000ms''



Tal vez algo como esto?

DateTime.Now.ToString("%d ''d'' %h ''h'' %m ''m'' %s ''seconds'' %ms ''ms''")


public static string ReadableTime(int milliseconds) { var parts = new List<string>(); Action<int, string> add = (val, unit) => { if (val > 0) parts.Add(val+unit); }; var t = TimeSpan.FromMilliseconds(milliseconds); add(t.Days, "d"); add(t.Hours, "h"); add(t.Minutes, "m"); add(t.Seconds, "s"); add(t.Milliseconds, "ms"); return string.Join(" ", parts); }