2009-11-11 143 views
1

我有以下代碼減去日期返回負

_intervals = intervalEndTime.Subtract(intervalStartTime).Hours; 

intervalEndTime = 2009-11-11 16:00 intervalStartTime = 2009-11-11 08:00

使得_intervals含有-8。如何成爲-8?從16開始移除8小時應該是8?我可以改變爲正值8,但是有人可以解釋這一點嗎?

 private int calcIntervalRows() 
    { 
     int _intervals = 0; 

     switch (this.BookingObject.IntervalEntity.IntervalEntityID.Trim()) 
     { 
      case "DAY": 
       _intervals = 1; 
       break; 
      case "MIN": 
       _intervals = SplitTime(new TimeSpan(intervalStartTime.Minute - intervalEndTime.Hour, 0, 0), new TimeSpan(this.BookingObject.IntervalValue != null ? this.BookingObject.IntervalValue.Value : 1, 0, 0)); 
       break; 
      case "HOUR": 
       _intervals = (int)intervalEndTime.Subtract(intervalStartTime).Hours;      
       break; 

     } 

     return _intervals; 
    } 

alt text http://svevarn.com/que.gif

/M

+1

是否有時間旅行? – 2009-11-11 15:11:27

+1

你的光標在評估中的哪裏?如果您在評估報表之前將值顯示給我,_intervals可能會從之前的任務中得到-8。 – 2009-11-11 15:52:52

+1

什麼是涉及到的兩個DateTimes的DateTimeKind?如果一個是UTC,另一個是本地的,那可以解釋它。 – 2009-11-11 16:14:37

回答

3

它爲我的作品:

using System; 

class Program 
{ 
    static void Main() 
    { 
     DateTime start = new DateTime(2009, 11, 11, 8, 0, 0); 
     DateTime end = new DateTime(2009, 11, 11, 16, 0, 0); 

     Console.WriteLine(end.Subtract(start).Hours); 
    } 
} 

請檢查您的開始/結束時間是圓的正確途徑。如果你可以創建一個簡短但完整的程序,但是這樣可以證明問題,那將會有很大的幫助。

1

對不起,我在LINQPad嘗試這樣做,當試圖獲得兩個時間之間的區別,特別是如果他們是在不同的日子了8

DateTime intervalEndTime = DateTime.Parse("2009-11-11 16:00"); 
DateTime intervalStartTime = DateTime.Parse("2009-11-11 08:00"); 
var _intervals = intervalEndTime.Subtract(intervalStartTime).Hours; 
_intervals.Dump(); 
2

您應該使用TimeSpan.TotalHours(而不是小時)。

+0

+1這是一個常見而容易犯的錯誤 – 2009-11-11 16:07:48