2012-05-10 41 views
30

Tengo dos fechas, una menos que la otra. Quiero crear una cadena como esteDías, horas, minutos, segundos entre dos fechas

"0 días, 0 horas, 23 minutos, 18 segundos"

que representan la diferencia entre las dos fechas. ¿Cómo puedo obtener estos elementos de esta cadena?

+1

gracias chicos - Desearía poder aceptar todas sus respuestas, pero eso no está permitido, así que he votado por encima de todas sus respuestas. –

Respuesta

70

TimeSpan es el objeto que necesita:

TimeSpan span = (DateTime.Now - DateTime.Now); 

String.Format("{0} days, {1} hours, {2} minutes, {3} seconds", 
    span.Days, span.Hours, span.Minutes, span.Seconds); 
+0

pero ¿esto me dará días, horas, minutos y segundos? –

+2

http://msdn.microsoft.com/en-us/library/system.timespan.aspx –

+0

simplemente use span.Days, span.Hours etc ... –

9

Cuando resta un DateTime de otro, obtiene una instancia TimeSpan, que expone esos valores.

TimeSpan diff = DateTime.Now - DateTime.Today; 
string formatted = string.Format(
         CultureInfo.CurrentCulture, 
         "{0} days, {1} hours, {2} minutes, {3} seconds", 
         diff.Days, 
         diff.Hours, 
         diff.Minutes, 
         diff.Seconds); 
2

¿Ha intentado utilizar

TimeSpan() 

que sin duda puede hacer lo que quiera

3

Utilice un intervalo de tiempo

DateTime startTime = DateTime.Now; 

DateTime endTime = DateTime.Now.AddSeconds(75); 

TimeSpan span = endTime.Subtract (startTime); 
Console.WriteLine("Time Difference (seconds): " + span.Seconds); 
Console.WriteLine("Time Difference (minutes): " + span.Minutes); 
Console.WriteLine("Time Difference (hours): " + span.Hours); 
Console.WriteLine("Time Difference (days): " + span.Days); 

String yourString = string.Format("{0} days, {1} hours, {2} minues, {3} seconds", 
    span.Days, span.Hours, span.Minutes, span.Seconds); 
1

¿Qué tal algo así?

TimeSpan diff = dateTimeNew - dateTimeOld; 
    string output = string.Format("{0} days, {1} hours, {2} minues, {3} seconds", diff.Days, diff.Hours, diff.Minutes, diff.Seconds); 
    Console.WriteLine(output); 
2
DateTime myDay = DateTime.Now; 
    DateTime otherDate = DateTime.Now.AddYears(1); 
    var test = otherDate.Subtract(myDay); 
    Console.WriteLine("Days:" + test.Days + "Hours:" + test.Hours +"Minutes" + test.Minutes +"Seconds" + test.Seconds); 

Aquí prueba es de tipo marca de hora

+2

Solo para evitar confusiones, _.TotalSeconds_ devolverá ** total ** número de segundos, por lo que un intervalo de tiempo de 1 hora devolverá 3.600 TotalSeconds. La propiedad _.Seconds_ devolverá 0 segundos ya que no hay "restos" en un intervalo de tiempo de 1 hora. – CodeHxr

+1

@CodeHxr, a la derecha. Voy a actualizarlo – Habib

3

Utilice la clase TimeSpan, que obtendrá cuando se resta la fecha.

Puede formatear la salida utilizando cadenas de formato standard o custom.

"0 días, 0 horas, 23 minutos, 18 segundos"

se puede tener con algo como:

TimeSpan ts = DateTime.Now - DateTime.Today; 
Console.WriteLine(
    string.Format("{0:%d} days, {0:%h} hours, {0:%m} minutes, {0:%s} seconds", ts) 
); 

OMI, es más limpio y más fácil de usar string.Format en lugar de tener que escapar de las palabras en su cadena de formato (que necesitaría si acaba de utilizar .ToString) o compilarlo manualmente.

1
TimeSpan diffTime = dateTimeNew -PreviousDate; 
int days=diffTime.Days; 
int hours=diffTime.Hours; 
int minutes=diffTime.Minutes; 
int seconds=diffTime.Seconds; 
+0

OP quiere construir una cadena a partir del resultado del cálculo. Esa parte falta en tu respuesta. – kRiZ

2

No olvide que si desea que este cálculo sea portátil que necesita para almacenarla como UTC y luego, cuando se muestre convertir en la hora local. Como regla general Almacenar las fechas como UTC y convertir a la hora local para la presentación.

Cuestiones relacionadas