2011-07-13 12 views
17

Mam następujący kod:poćwiczyć różnicę minut pomiędzy datami

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

Problem jestem stoi jest to, że chciałbym do treningu różnicę między ustaloną datą oraz datę i czas. Ta wartość będzie wtedy musiała podać mi wartość, ile minut upływa między datami.

Próbowałem za pomocą:

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

Ale to dało mi niepoprawną wartość 0 gdy wartość została ustalona 10 minut do przodu.

Czy ktoś może mi pomóc rozwiązać to

Dzięki.

+0

chciałbym sprawdzić, czy enteredDate jest to, czego go sądzić jest. Drugi blok kodu powinien działać w tym przypadku. Nadal chcesz używać TotalMinutes, ponieważ coś takiego jak 1godzina 1min zwróci "1" minutę, co prawie na pewno nie jest tym, czego potrzebujesz, ale to nie byłby problem, który tu przedstawiłeś. – heisenberg

Odpowiedz

28

myślę, co naprawdę chcesz to span.TotalMinutes (nie mogę powiedzieć ile razy ten złapał mnie na klasy TimeSpan!)

Dla porównania

TimeSpan.Minutes - „Pobiera składnik PROTOKÓŁ przedział czasu reprezentowany przez bieżącą strukturę TimeSpan. "

TimeSpan.TotalMinutes - "Pobiera wartość aktualnej struktury TimeSpan wyrażoną w pełnych i ułamkowych minutach."

+0

Suma minut była tą jedyną! Dzięki za taki prosty błąd. –

+0

@Sandeep - Uwierz mi, nie jesteś sam. Popełniłem ten sam błąd co ostatnio, w tym tygodniu! – Jamiec

+0

@Sandeep Interesujące, ponieważ zarówno TotalMinutes, jak i Minutes powinny zwrócić 10, a nie 0 dla opisanego problemu. (TimeSpan 10 minut) – heisenberg

0

I Try rozszerzenie go rozwiązać ponad minutach można ją poprawić:

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; 

     } 

Przy jej przykład w konsoli debugowania:

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