2011-07-13 17 views
17

tengo el siguiente código:funcionan a cabo minutos de diferencia entre las fechas

DateTime pickerDate = Convert.ToDateTime(pickerWakeupDate.SelectedDate); 
string enteredStr = pickerDate.ToShortDateString() + " " + textWakeupTime.Text; 
string format = "dd/M/yyyy HH:mm"; 
DateTime enteredDate = DateTime.ParseExact(enteredStr, format, null); 

El problema que estoy enfrentando es que me gustaría hacer ejercicio la diferencia entre la fecha prevista y la fecha y hora actual. Este valor deberá proporcionarme un valor de cuántos minutos hay entre las fechas.

He intentado utilizar:

DateTime todaysDateTime = DateTime.Now; 
TimeSpan span = enteredDate.Subtract(todaysDateTime); 
int totalMins = span.Minutes; 

Pero esto me dio un valor incorrecto 0 cuando se estableció el valor de 10 minutos por delante.

Puede alguien ayudarme a solucionar este

Gracias.

+0

Yo verifico que la enteredDate es lo que creo que es. El segundo bloque de código debería funcionar en esta instancia. Aún desea utilizar TotalMinutes, ya que algo así como 1 hora y 1 minuto devolverá "1" durante unos minutos, lo que seguramente no es lo que desea, pero ese no sería el problema que ha expuesto aquí. – heisenberg

Respuesta

28

creo que lo que realmente quiere es span.TotalMinutes (No puedo decirte cuántas veces esto me ha pillado en la clase TimeSpan!)

Como referencia

TimeSpan.Minutes - "Obtiene el componente minutos de la intervalo de tiempo representado por la estructura actual de TimeSpan ".

TimeSpan.TotalMinutes - "Obtiene el valor de la estructura actual de TimeSpan expresada en minutos enteros y fraccionarios".

+0

¡El total de minutos fue el indicado! Gracias por eso, un error tan simple. –

+0

@ Sandeep - Créanme que no están solos. ¡Cometí el mismo error tan recientemente como esta semana! – Jamiec

+0

@Sandeep Interesante, ya que tanto TotalMinutes como Minutes deberían devolver 10 y no 0 para el problema que describió. (un TimeSpan de 10 minutos) – heisenberg

0

I Try una extensión que resolver más de minutos usted podría mejorarlo:

public enum eTimeFragment 
    { 
     hours, 
     minutes, 
     seconds, 
     milliseconds 
    } 


public static long DiferenceIn(this DateTime dtOrg, DateTime Diff, eTimeFragment etf = eTimeFragment.minutes) 
     { 

      long InTicks = 1; 
      switch (etf) 
      { 
       case eTimeFragment.hours: 
        InTicks = DateTime.MinValue.AddHours(1).Ticks; 
        break; 
       case eTimeFragment.seconds: 
        InTicks = DateTime.MinValue.AddSeconds(1).Ticks; 
        break; 
       case eTimeFragment.milliseconds: 
        InTicks = DateTime.MinValue.AddMilliseconds(1).Ticks; 
        break; 
       case eTimeFragment.minutes: 
       default: 
        InTicks = DateTime.MinValue.AddMinutes(1).Ticks; 
        break; 
      } 

      if (dtOrg > Diff) 
       return dtOrg.AddTicks(Diff.Ticks * -1).Ticks/InTicks; 
      else 
       return Diff.AddTicks(dtOrg.Ticks * -1).Ticks/InTicks; 

     } 

Al usarlo, ejemplo en la consola de depuración:

DateTime fromDate = DateTime.Now; 
    //Default is Minutes fragment 
    fromDate.DiferenceIn(fromDate.AddHours(4)) 
    240 
    fromDate.DiferenceIn(fromDate.AddHours(50)) 
    3000 
    fromDate.DiferenceIn(fromDate.AddDays(1)) 
    1440 
    fromDate.DiferenceIn(fromDate.AddDays(1),WGTS_Extensions.eTimeFragment.hours) 
    24 
    fromDate.DiferenceIn(fromDate.AddDays(1),WGTS_Extensions.eTimeFragment.seconds) 
    86400 
    fromDate.DiferenceIn(fromDate.AddHours(1),WGTS_Extensions.eTimeFragment.seconds) 
    3600 
Cuestiones relacionadas