减去日期返回负数

时间:2009-11-11 15:10:38

标签: c#

我有以下代码

_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

3 个答案:

答案 0 :(得分: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 :(得分:2)

在尝试获取两次之间的差异时,您应该使用TimeSpan.TotalHours(而不是小时),特别是如果它们在不同的日子。

答案 2 :(得分: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();