You need to enable JavaScript to run this app. C# 如何对当前时间按小时取整(舍去分钟部分)
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.19 06:06:08