2015-01-06 1 views
-2

Интересно, как я могу получить продолжительность между 2300 и 0100, которая должна быть 0200, но она возвращает 2200. Я работаю над приложением с Xamarin.Forms и использую два TimePickers, которые возвращают TimeSpan.Рассчитать промежуток времени между 2300 и 0100

private TimeSpan CalculateDuration() 
{ 
    var result = timePickerEnd.Time.Subtract(timePickerStart.Time); 
    return result.Duration(); 
} 

До тех пор, пока startTime меньше, чем endTime, все работает нормально. Но если кто-то начинает что-то в 2300 и заканчивается в 0100, он возвращает 22. Интересно, есть ли у кого-нибудь рекомендации, как я должен атаковать эту проблему.

+4

Каков тип 'timePickerStart' и' timePickerEnd', потому что они не 'DateTime' (у него нет свойства' Time')? (Хорошо работает с 'DateTime': http://rextester.com/WRYIC93965) – Jamiec

+4

Его было некоторое время с тех пор, как я покинул начальные школы, все же я думаю, что 23 часа минус один час 22 часа, а C# верен. –

+0

Тип TimeSpan, так как я работаю с TimePicker в Xamarin.Forms. И если startTime 0100, а endTime - 2300, продолжительность - 2200. Это правильно. Однако, если startTime равно 2300, а endTime - 0100, продолжительность по-прежнему равна 2200. Если это не было для метода длительности, это было бы -2200. Вот почему я спросил, есть ли у кого-нибудь советы, как я могу решить эту проблему. – user2236165

ответ

2

У вас есть определенные правила, вы должны их выполнять:

var ts1 = timePickerStart.Time; 
var ts2 = timePickerEnd.Time; 
var difference= ts2.Subtract(ts1); 
if(ts1 > ts2) 
{ 
    difference= difference.Add(TimeSpan.FromHours(24)); 
} 
return difference; 

Поскольку правило, что вы не в состоянии сформулировать (что я догадалась выше) является то, что «если время начала больше чем время окончания, то их следует интерпретировать как происходящие в последующие дни », что ни в коем случае не является обязательным условием, которое должна сделать система.

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

  • Нет связанных вопросов^_^