2009-11-11 7 views
1

У меня есть следующий коддата Вычесть возвращает отрицательное

_intervals = intervalEndTime.Subtract(intervalStartTime).Hours; 

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

делает _intervals содержат -8. Как это получилось -8? Удаление 8 часов с 16 должно быть 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

Есть ли время путешествия? –

+1

Где находится ваш курсор в оценке? Если вы показываете мне значения до того, как выражение было оценено, _intervals могут иметь -8 в нем из предыдущего назначения. –

+1

Что такое DateTimeKind из двух связанных с DateTimes? Если есть UTC, а другой - Local, это может объяснить это. –

ответ

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 Это обычная и простая ошибка. –

Смежные вопросы