You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DateTime向上取整至最近小时的两种实现性能基准测试疑问

DateTime 向上取整至最近小时的实现对比与基准测试

最近我对如何把DateTime的分钟/秒向上取整到最近小时(直接忽略当前分秒,跳到下一小时)的实现行为有点疑问,所以特意写了两种不同的实现方式,并用BenchMarkDotNet做了基准测试来对比。

测试代码

private DateTime testData = DateTime.Now;

[Benchmark]
public DateTime CeilingUsingNewOperator() 
    => new DateTime(testData.Year, testData.Month, testData.Day, testData.Hour + 1, 0, 0);

[Benchmark]
public DateTime CeilingUsingAddOperator() 
    => testData.AddHours(1).AddMinutes(-testData.Minute).AddSeconds(-testData.Second);

实现逻辑与注意点

  • CeilingUsingNewOperator方法:直接通过DateTime构造函数创建新实例,把当前小时加1,分钟和秒设为0。这种方式看起来简洁直接,但有个隐藏的边界问题:如果当前时间是当天的23点(比如23:45:30),testData.Hour + 1会得到24,而DateTime构造函数不允许小时值超过23,这时候会抛出ArgumentException,导致代码崩溃。
  • CeilingUsingAddOperator方法:先通过AddHours(1)把时间加1小时,再分别减去当前的分钟和秒数。这种方法能自动处理跨天的情况(比如23点加1小时会自动变成次日0点),不会出现参数非法的问题,逻辑更健壮。

基准测试预期

从性能角度看,直接构造DateTime实例的方法理论上会比多次调用Add方法更快,但前者的边界问题是必须要注意的——如果你的业务场景中存在当天23点的时间,一定要避免使用第一种实现,否则会引发异常。

内容的提问来源于stack exchange,提问作者Anu Viswan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:29:56