Ich habe einige Benchmarks durchgeführt, um herauszufinden, was der schnellste Weg ist, und dies sind meine Ergebnisse und Schlussfolgerungen. Ich habe jede Methode 10M Mal ausgeführt und einen Kommentar mit der durchschnittlichen Laufzeit pro Durchlauf hinzugefügt.
Wenn Ihre Eingabemillisekunden nicht auf einen Tag begrenzt sind (Ihr Ergebnis kann 143:59:59.999 sein), sind dies die Optionen, von schneller zu langsamer:
// 0.86 ms
static string Method1(int millisecs)
{
int hours = millisecs / 3600000;
int mins = (millisecs % 3600000) / 60000;
// Stellen Sie sicher, dass Sie den geeigneten Dezimaltrenner verwenden
return string.Format("{0:D2}:{1:D2}:{2:D2}.{3:D3}", hours, mins, millisecs % 60000 / 1000, millisecs % 1000);
}
// 0.89 ms
static string Method2(int millisecs)
{
double s = millisecs % 60000 / 1000.0;
millisecs /= 60000;
int mins = millisecs % 60;
int hours = millisecs / 60;
return string.Format("{0:D2}:{1:D2}:{2:00.000}", hours, mins, s);
}
// 0.95 ms
static string Method3(int millisecs)
{
TimeSpan t = TimeSpan.FromMilliseconds(millisecs);
// Stellen Sie sicher, dass Sie den geeigneten Dezimaltrenner verwenden
return string.Format("{0:D2}:{1:D2}:{2:D2}.{3:D3}",
(int)t.TotalHours,
t.Minutes,
t.Seconds,
t.Milliseconds);
}
Wenn Ihre Eingabemillisekunden auf einen Tag begrenzt sind (Ihr Ergebnis wird nie größer als 23:59:59.999 sein), sind dies die Optionen, von schneller zu langsamer:
// 0.58 ms
static string Method5(int millisecs)
{
// Schnellster Weg, um ein DateTime um Mitternacht zu erstellen
// Stellen Sie sicher, dass Sie den geeigneten Dezimaltrenner verwenden
return DateTime.FromBinary(599266080000000000).AddMilliseconds(millisecs).ToString("HH:mm:ss.fff");
}
// 0.59 ms
static string Method4(int millisecs)
{
// Stellen Sie sicher, dass Sie den geeigneten Dezimaltrenner verwenden
return TimeSpan.FromMilliseconds(millisecs).ToString(@"hh\:mm\:ss\.fff");
}
// 0.93 ms
static string Method6(int millisecs)
{
TimeSpan t = TimeSpan.FromMilliseconds(millisecs);
// Stellen Sie sicher, dass Sie den geeigneten Dezimaltrenner verwenden
return string.Format("{0:D2}:{1:D2}:{2:D2}.{3:D3}",
t.Hours,
t.Minutes,
t.Seconds,
t.Milliseconds);
}
Falls Ihre Eingabe nur Sekunden sind, sind die Methoden etwas schneller. Wieder, wenn Ihre Eingabesekunden nicht auf einen Tag begrenzt sind (Ihr Ergebnis kann 143:59:59 sein):
// 0.63 ms
static string Method1(int secs)
{
int hours = secs / 3600;
int mins = (secs % 3600) / 60;
secs = secs % 60;
return string.Format("{0:D2}:{1:D2}:{2:D2}", hours, mins, secs);
}
// 0.64 ms
static string Method2(int secs)
{
int s = secs % 60;
secs /= 60;
int mins = secs % 60;
int hours = secs / 60;
return string.Format("{0:D2}:{1:D2}:{2:D2}", hours, mins, s);
}
// 0.70 ms
static string Method3(int secs)
{
TimeSpan t = TimeSpan.FromSeconds(secs);
return string.Format("{0:D2}:{1:D2}:{2:D2}",
(int)t.TotalHours,
t.Minutes,
t.Seconds);
}
Und wenn Ihre Eingabesekunden auf einen Tag begrenzt sind (Ihr Ergebnis wird nie größer als 23:59:59 sein):
// 0.33 ms
static string Method5(int secs)
{
// Schnellster Weg, um ein DateTime um Mitternacht zu erstellen
return DateTime.FromBinary(599266080000000000).AddSeconds(secs).ToString("HH:mm:ss");
}
// 0.34 ms
static string Method4(int secs)
{
return TimeSpan.FromSeconds(secs).ToString(@"hh\:mm\:ss");
}
// 0.70 ms
static string Method6(int secs)
{
TimeSpan t = TimeSpan.FromSeconds(secs);
return string.Format("{0:D2}:{1:D2}:{2:D2}",
t.Hours,
t.Minutes,
t.Seconds);
}
Als abschließende Anmerkung möchte ich hinzufügen, dass ich festgestellt habe, dass string.Format
etwas schneller ist, wenn Sie D2
anstelle von 00
verwenden.