2009-11-11 97 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