C#中如何获取两个DateTimeOffset忽略日期差异的仅时间差
C# 计算两个DateTimeOffset的时分秒差值(忽略年月日)
实现核心逻辑是通过TimeOfDay属性提取DateTimeOffset的时分秒部分,再对两个时分秒的时间跨度做差值计算:
基础实现(适配示例场景)
你给出的示例中,起始时间时分秒为13:30:00,结束时间时分秒为13:45:00,忽略年月日差后预期得到15分钟差值,代码示例如下:
// 定义两个测试用DateTimeOffset DateTimeOffset startDate = DateTimeOffset.Parse("2021-08-28T13:30:00+00:00"); DateTimeOffset endDate = DateTimeOffset.Parse("2021-08-30T13:45:00+00:00"); // 提取时分秒部分计算差值 TimeSpan timeDifference = endDate.TimeOfDay - startDate.TimeOfDay; // 获取无符号的差值结果 TimeSpan absoluteDifference = timeDifference.Duration(); // 输出测试:结果为00:15:00,即15分钟 Console.WriteLine(absoluteDifference);
补充场景:跨午夜最小差值计算
如果业务需要统计两个时间的最小间隔(比如23:50和次日00:10的最小差为20分钟,而非23小时40分钟),可以额外加一层判断:
TimeSpan minTimeDifference = absoluteDifference > TimeSpan.FromHours(12) ? TimeSpan.FromHours(24) - absoluteDifference : absoluteDifference;
关键API说明
DateTimeOffset.TimeOfDay:返回当前时间从零点开始的时分秒对应的TimeSpan对象,自动丢弃年、月、日信息TimeSpan.Duration():返回当前TimeSpan的绝对值,避免结束时间时分秒小于起始时间时分秒时出现负数结果
内容的提问来源于stack exchange,提问作者han na
相关产品推荐
相关产品推荐

