2010-09-08 20 views

Antwort

23
int totalSeconds = 222; 
int seconds = totalSeconds % 60; 
int minutes = totalSeconds/60; 
string time = minutes + ":" + seconds; 
+8

Das würde 125 Sekunden als "2: 5" formatieren, während ich * verdächtige * 2:05 wäre passender. –

+1

Ja, die Zeichenfolge ist nicht formatiert, um den Sekunden eine führende Null für einzelne Ziffern zu geben, also würde ich es so machen: string time = (totalSeconds/60) .ToString() + ":" + (totalSeconds% 60) .ToString ("00"); –

1
var seconds = 60; 
//10,000 ticks in a millisecond 
var ticks = seconds*10000*1000; 
DateTime dt = new DateTime(ticks); 
dt.ToString("mm:ss"); 
+0

funktioniert es noch, wenn es würde Stunden sein? z.B. 3700 Sekunden sind 1 Stunde 1 Minute 40 Sekunden. Wäre es nicht 1:40 statt 61:40? –

+0

Ja, es funktioniert mit Stunden, Tagen und jedem Mitglied der DateTime-Struktur. Probieren Sie es selbst;) –

+0

Das Hinzufügen einiger Erklärungen zusammen mit dem Code würde diese Antwort besser machen. – Thom

2

Einfache Mathematik Second-Format. 60 Sekunden bis eine Minute.

int mins = totalseconds/60; 
int secs = totalseconds % 60; 

Console.Writeline(string.Format("{0}:{1}", mins, secs)); 
6

Etwas wie folgt aus:

string minSec = string.Format("{0}:{1:00}", seconds/60, seconds % 60); 

Beachten Sie, dass das die Sekunden sicherzustellen, werden immer als zwei Ziffern angezeigt, zum Beispiel "2:05" für 125 Sekunden. Die Protokolle werden derzeit nicht auf die gleiche Weise behandelt, aber natürlich könnten sie auch sein.

Dies ist nicht gut mit negativen Zahlen. Wenn Ihre Sekunden negativ sein können, können Sie so etwas wie dies wollen:

string minSec = string.Format("{0}:{1:00}", seconds/60, 
           (Math.Abs(seconds)) % 60); 

Schließlich werden Sie immer weniger haben als eine Stunde von Sekunden? Es mag seltsam aussehen, "80:00" zu sehen, wenn man beispielsweise "1:20:00" meint.

35

Eine vielseitige Version ist TimeSpan wie folgt zu verwenden:

var span = new TimeSpan(0, 0, seconds); //Or TimeSpan.FromSeconds(seconds); (see Jakob C´s answer) 
var yourStr = string.Format("{0}:{1:00}", 
          (int)span.TotalMinutes, 
          span.Seconds); 
15

Nur der Vollständigkeit halber werde ich eine Antwort hinzufügen mit TimeSpan (funktioniert ab .NET 4.0):

int seconds = 1045; 
var timespan = TimeSpan.FromSeconds(seconds);    
Console.WriteLine(timespan.ToString(@"mm\:ss")); 
+0

+1 für '.FromSeconds' anstatt Konstruktor wie mich zu verwenden. Aber dein Code kompiliert nicht - keine Überladung von '.ToString'. –

+0

AFAIK, diese Überladung wurde in .NET 4 hinzugefügt: http://msdn.microsoft.com/en-us/library/dd992632.aspx –

+1

Ahh fair :) Aber ein anderes Problem ist, dass es nur bis zu 59 Minuten angezeigt wird.Allerdings weiß ich nicht, ob das für Ramesh ausreichen wird. –

2

Eine alternative Art und Weise um die Sekunden als z "2:05" könnte PadLeft sein.

string time = minutes.ToString() + ":" + seconds.ToString().PadLeft(2,'0'); 
4
double seconds=125;  
TimeSpan.FromSeconds(seconds).ToString() 

geben Ihnen: 00:02:05. Nach meinem Verständnis ist diese integrierte Lösung erweiterbarer, da sie Ihnen auch Stunden geben kann, ohne die Logik zu plombieren.

0

Was funktioniert für mich ...

public static string SecondsToMinutes(int seconds) 
{ 
    var ts = new TimeSpan(0, 0, seconds);     
    return new DateTime(ts.Ticks).ToString(seconds >= 3600 ? "hh:mm:ss" : "mm:ss"); 
} 
0

streng genommen nicht die ursprüngliche Frage zu beantworten, aber falls jemand (oder mich) in der Zukunft hier von Google will kommt auch einen Schwimmer mit Millisekunden zu formatieren:

float secs = 23.69; 
string m_ss_mmm = string.Format("{0}:{1:00}.{2:000}", (int)secs/60, (int)(secs % 60), (secs - ((int)secs)) * 1000); 

Ergebnis:

0:23.690 
Verwandte Themen