2010-09-08 9 views

Respuesta

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

Eso formatearía 125 segundos como "2: 5", mientras que I * sospecho que * 2:05 sería más apropiado. –

+1

Sí, la cadena no está formateada para dar a los segundos un cero inicial para números de un dígito, así que lo haría así: string time = (totalSegundos/60) .ToString() + ":" + (totalSegundos% 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

¿todavía funciona cuando habría horas? p.ej. 3700sec son 1h 1min 40sec. ¿No regresaría 1:40 en lugar de 61:40? –

+0

Sí, funcionará con horas, días y cada miembro de la estructura DateTime. Pruébelo usted mismo;) –

+0

Agregar algunas explicaciones junto con el código haría que esta respuesta sea mejor. – Thom

2

matemáticas simples. 60 segundos a un minuto.

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

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

Algo como esto:

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

Tenga en cuenta que se asegurará de que los segundos siempre se muestran como dos dígitos, por ejemplo, "2:05" por 125 segundos. Actualmente, las actas no se tratan de la misma manera, pero por supuesto podrían serlo.

Esto no funciona bien con números negativos. Si los segundos pueden ser negativos, es posible que desee algo como esto:

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

Por último, habrá que siempre tienen menos de una hora de segundos? Puede parecer extraño ver "80:00" cuando realmente quiere decir "1:20:00" por ejemplo.

35

Una versión versátil es utilizar TimeSpan así:

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

simplemente para la corrección voy a añadir una respuesta utilizando TimeSpan (funciona como de .NET 4.0):

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

+1 para '.FromSeconds' en lugar de usar constructor como yo. Pero su código no compila, no hay sobrecarga de '.ToString'. –

+0

AFAIK, esta sobrecarga se agregó en .NET 4: http://msdn.microsoft.com/en-us/library/dd992632.aspx –

+1

Ahh justo :) Pero otro problema es que solo se mostrará hasta 59 minutos.Sin embargo, no sé si eso será suficiente para Ramesh. –

2

Una forma alternativa para mostrar los segundos como, por ejemplo "2:05" podría ser usar PadLeft.

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

le dará: 00:02:05. Según tengo entendido, esta solución incorporada es más ampliable, ya que también puede proporcionarle horas, sin necesidad de recurrir a la lógica.

0

Lo que funciona para mí ...

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

No es estrictamente responder a la pregunta original, pero en caso de que alguien (o yo) en el futuro viene aquí desde Google querer dar formato a un flotador con milisegundos, así:

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); 

Resultado:

0:23.690 
Cuestiones relacionadas