首页 > 解决方案 > 如何每 10 分钟在 datetime 上舍入分钟

问题描述

在 DateTime 对象上对 C# 进行四舍五入的最佳方法是什么?情况是这样的:

我开始像这样测试一轮:

public static DateTime RoundDown(this DateTime dt, TimeSpan d)
{
    var delta = dt.Ticks % d.Ticks;

    return new DateTime(dt.Ticks - delta, dt.Kind);
}

标签: c#.net-core

解决方案


这将完成工作,但仅限于最近的 10 分钟间隔。为了使其更通用,需要使用包含作为参数的时间跨度来实现,以定义日期时间的舍入级别。

    public DateTime RoundDateTimeMinutes(DateTime date, bool roundUp = true)
    {
        var minutesDiff = date.Minute % 10;

        if (minutesDiff == 5)
        {
            if (roundUp)
            {
                date = date.AddMinutes(minutesDiff);
            }
            else
            {
                date = date.AddMinutes(-minutesDiff);
            }
        }            
        else if (minutesDiff > 5)
        {
            date = date.AddMinutes(10 - minutesDiff);
        }
        else
        {
            date = date.AddMinutes(-minutesDiff);
        }

        return date;
    }

编辑:实际上上面的结果四舍五入最近的 10 分钟间隔。这是总是四舍五入分钟的实际方法。

    public DateTime RoundDateTimeMinutes(DateTime date)
    {
        var minutesDiff = date.Minute % 10;
        return date.AddMinutes(-minutesDiff);            
    }

推荐阅读