Самый простой способ - создать усеченные DateTime
переменные, удалив минуты / секунды, если интересны только часы, и обрезая часы / минуты / секунды, если интересны только дни. Затем рассчитайте разницу в часах или днях.
// Calculates the number of hour strikes between the two given times
public static int HourStrikesBetween(DateTime from, DateTime to)
{
if(from > to)
{
throw new ArgumentException("from must not be after to");
}
// Trim to hours
DateTime fromTrimmed = new DateTime(from.Year, from.Month, from.Day, from.Hour, 0, 0);
DateTime toTrimmed = new DateTime(to.Year, to.Month, to.Day, to.Hour, 0, 0);
int hours = (int)(toTrimmed - fromTrimmed).TotalHours;
return hours;
}
// Calculates the number of midnights between the two given times
public static int MidnightsBetween(DateTime from, DateTime to)
{
if (from > to)
{
throw new ArgumentException("from must not be after to");
}
// Trim to days
DateTime fromTrimmed = new DateTime(from.Year, from.Month, from.Day);
DateTime toTrimmed = new DateTime(to.Year, to.Month, to.Day);
int days = (toTrimmed - fromTrimmed).Days;
return days;
}
Пример:
DateTime date0 = new DateTime(2018, 8, 9, 20, 59, 59);
DateTime date1 = new DateTime(2018, 8, 9, 21, 0, 0);
int hourspassed = HourStrikesBetween(date0, date1); // = 1
date0 = new DateTime(2018, 8, 9, 20, 00, 00);
date1 = new DateTime(2018, 8, 9, 21, 50, 0);
hourspassed = HourStrikesBetween(date0, date1); // = still 1
date0 = new DateTime(2018, 8, 9, 20, 59, 59);
date1 = new DateTime(2018, 8, 9, 22, 10, 0);
hourspassed = HourStrikesBetween(date0, date1); // = 2
date0 = new DateTime(2018, 8, 9, 23, 59, 59);
date1 = new DateTime(2018, 8, 10, 00, 00, 00);
int daysPassed = MidnightsBetween(date0, date1); // = 1
Обратите внимание, что это будет работать только при пересечении границ летнего времени, если вы постоянно используете UTC DateTime вместо Local DateTime.