如何实现DateTime按指定时长或自动规则向下取整时间?
C# 时间向下取整方法扩展
保留原有带参方法
该方法可将指定时间向下取整到指定时间间隔的整数倍,实现代码如下:
DateTime RoundDown(DateTime date, TimeSpan interval) { return new DateTime(date.Ticks / interval.Ticks * interval.Ticks); }
带参方法调用示例
支持按任意时长向下取整,例如按5分钟间隔取整:
// 将当前时间按5分钟间隔向下取整,如22:51会返回22:50 DateTime currentTime = RoundDown(DateTime.Now, TimeSpan.FromMinutes(5));
注意:原示例中使用负时间间隔(
TimeSpan.FromMinutes(-5))会导致取整方向与预期相反,建议使用正间隔参数。
新增无参重载方法
新增无参方法后,调用时会自动获取当前系统时间,并按1分钟间隔向下取整(符合示例中22:51取整到22:50的需求),实现代码如下:
// 无参重载:自动使用当前时间,按1分钟间隔向下取整 DateTime RoundDown() { return RoundDown(DateTime.Now, TimeSpan.FromMinutes(1)); }
无参方法调用示例
// 获取当前时间并按1分钟向下取整,如22:51返回22:50 DateTime roundedTime = RoundDown();
可选扩展(自定义自动取整规则)
若需要根据当前时间动态调整取整间隔(而非固定1分钟),可修改无参方法的逻辑,示例如下:
// 示例:根据当前分钟数动态选择取整间隔 DateTime RoundDown() { DateTime now = DateTime.Now; TimeSpan interval; // 自定义规则:分钟数小于15则按5分钟取整,否则按15分钟取整 interval = now.Minute < 15 ? TimeSpan.FromMinutes(5) : TimeSpan.FromMinutes(15); return RoundDown(now, interval); }
内容的提问来源于stack exchange,提问作者Daniel Lip
相关产品推荐
相关产品推荐

