2009-12-03 102 views
7

Estoy tratando de calcular la diferencia entre dos fechas. Esto es lo que estoy usando actualmente:C# - ¿Diferencia entre dos fechas?

int currentyear = DateTime.Now.Year; 

DateTime now = DateTime.Now; 
DateTime then = new DateTime(currentyear, 12, 26); 
TimeSpan diff = now - then; 
int days = diff.Days; 
label1.Text = days.ToString() + " Days Until Christmas"; 

Todo funciona bien, excepto que es un día libre. Estoy asumiendo que esto se debe a que no cuenta nada menos de 24 horas por día completo. ¿Hay alguna manera de hacerlo? Gracias.

Respuesta

12
int days = (int)Math.Ceiling(diff.TotalDays); 
+0

No se puede convertir implícitamente el tipo 'doble' a 'int'. Existe una conversión explícita (¿falta un molde?) –

+1

int days = Convert.ToInt32 (Math.Ceiling (diff.TotalDays)); – user

+0

Oops, supone Math.Ceiling devuelto int ... un poco estúpido ahora que lo pienso – LorenVS

1

La pregunta es bastante filosófica; si la Navidad era mañana, ¿consideraría que falta 1 día o quedan 0 días? Si se pone el día de mañana en su cálculo, la respuesta será 0.

1

Su problema desaparece si la sustituye por:

DateTime.Now 

con:

DateTime.Today 

como su cálculo de la diferencia luego estará funcionando en días completos.

0

normalmente uso el siguiente código para obtener la salida según lo previsto por la unidad en la que se requiere que la salida:

 DateTime[] dd = new DateTime[] { new DateTime(2014, 01, 10, 10, 15, 01),new DateTime(2014, 01, 10, 10, 10, 10) }; 

     int x = Convert.ToInt32((dd[0] - dd[1]).TotalMinutes); 

     String unit = "days"; 

     if (x/60 == 0) 
     { 
      unit = "minutes"; 
     } 

     else if (x/60/24 == 0) 
     { 
      unit = "hours"; 
      x = x/60; 
     } 

     else 
     { 
      x = x/(60 * 24); 
     } 

     Console.WriteLine(x + " " + unit); 
Cuestiones relacionadas