2011-07-13 75 views
17

之間相差幾分鐘我有以下代碼:鍛鍊日期

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

我現在面臨的問題是,我想鍛鍊設定日期,日期和時間之間的區別了。然後這個值將需要提供給我一個在日期之間有多少分鐘的值。

我試着使用:

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

但是,這給了我一個不正確的值0當值設置提前10分鐘。

有誰能幫我解決這個問題

謝謝。

+0

我會驗證enteredDate是你覺得它是。第二塊代碼應該在這種情況下工作。您仍然希望使用TotalMinutes,因爲類似1小時1分鐘的內容會在幾分鐘後返回「1」,這幾乎肯定不是您想要的,但這不會成爲您在此處列出的問題。 – heisenberg

回答

28

我想你真正想要的是span.TotalMinutes(我不能告訴你多少次抓我出來的時間跨度類!)

僅供參考

TimeSpan.Minutes - 「獲取的紀要組件時間間隔由當前TimeSpan結構表示。「

TimeSpan.TotalMinutes - 「獲取當前TimeSpan結構的值,以整數和小數分鐘表示。」

+0

總分鐘是一個!謝謝你,這個簡單的錯誤。 –

+0

@Sandeep - 相信我你並不孤單。我本週也犯了同樣的錯誤! – Jamiec

+0

@Sandeep有趣的是,因爲TotalMinutes和Minutes對於你描述的問題應該返回10而不是0。 (一個10分鐘的時間跨度) – heisenberg

0

我儘量延長它解決比多分鐘,你可以改善它:

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; 

     } 

使用它,例如在調試控制檯:

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