3 回答
TA贡献2041条经验 获得超4个赞
如果我理解正确:
private static int GetHours(DateTime date1, DateTime date2)
{
return Math.Max(0, Convert.ToInt32((date1 - date2).TotalMinutes / 60 + ((date1 - date2).TotalMinutes % 60 > 0 ? 1 : 0)));
}
用法:
DateTime date0 = new DateTime(2018, 8, 9, 20, 59, 59);
DateTime date1 = new DateTime(2018, 8, 9, 21, 0, 0);
Console.Write(GetHours(date1, date0).ToString());
返回 1
跨越一天以上:
DateTime date0 = new DateTime(2018, 8, 9, 20, 59, 59);
DateTime date1 = new DateTime(2018, 8, 10, 21, 0, 0);
Console.Write(GetHours(date1, date0).ToString());
返回 25
TA贡献1865条经验 获得超7个赞
在我看来,这Math.Ceiling是完成这项工作的最简单方法:
例子:
DateTime date0 = new DateTime(2018, 8, 9, 20, 59, 59);
DateTime date1 = new DateTime(2018, 8, 9, 21, 0, 0);
int hoursPassed = (int)Math.Ceiling(date1.Subtract(date0).TotalHours);
Console.WriteLine("Hours " + hoursPassed);
示例 2:
DateTime date0 = new DateTime(2018, 8, 9, 23, 59, 59);
DateTime date1 = new DateTime(2018, 8, 10, 00, 00, 00);
int DaysPassed = (int)Math.Ceiling(date1.Subtract(date0).TotalDays);
Console.WriteLine("Days "+ DaysPassed);
TA贡献1848条经验 获得超2个赞
最简单的方法是通过在仅对小时感兴趣时去除分钟/秒以及在仅对天感兴趣时通过修剪小时/分钟/秒来创建修剪 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 日期时间而不是本地日期时间,这只会在跨越夏令时边界时起作用。
- 3 回答
- 0 关注
- 217 浏览
添加回答
举报
