C# 如何对当前时间按小时取整(舍去分钟部分)
C# 实现DateTime按小时取整的方案
下面给出两种生产环境常用的实现方式,均可以实现忽略分钟、秒、毫秒部分,仅保留整点时间的需求。
方案1:属性构造法(可读性最高)
直接提取原时间的年、月、日、小时属性,构造新的时间对象,分秒毫秒固定传0即可:
// 示例原时间:28/05/2021 2:16 PM DateTime originalTime = new DateTime(2021, 5, 28, 14, 16, 35, 123); DateTime roundedHourTime = new DateTime(originalTime.Year, originalTime.Month, originalTime.Day, originalTime.Hour, 0, 0);
特点:
- 逻辑直白无隐含操作,新手也能快速理解
- 自动继承原时间的
Kind属性,不会出现时区偏移错误
方案2:取模运算法(扩展性最强)
通过清除小时以下精度的Ticks实现取整,适合需要灵活调整取整粒度的场景:
DateTime originalTime = DateTime.Now; // 清除小时以下的Tick计数即可实现小时取整 DateTime roundedHourTime = originalTime.AddTicks(-(originalTime.Ticks % TimeSpan.TicksPerHour));
特点:
- 代码简洁,适合链式调用场景
- 只需替换
TicksPerHour为TicksPerMinute/TicksPerDay,即可快速实现分钟、天等其他粒度的时间取整
效果验证
输入:28/05/2021 2:16:35.123 PM
输出:28/05/2021 2:00:00.000 PM,完全符合需求
特殊场景适配
如果是.NET 6+环境,也可以结合DateOnly和TimeOnly实现:
DateTime original = DateTime.Now; DateOnly datePart = DateOnly.FromDateTime(original); TimeOnly timePart = TimeOnly.FromDateTime(original); DateTime roundedTime = datePart.ToDateTime(new TimeOnly(timePart.Hour, 0));
内容的提问来源于stack exchange,提问作者SheikMydeenMuthu
相关产品推荐
相关产品推荐

