c#仅当窗口时间超过5分钟时,才将分钟四舍五入到最近的四分之一

c#仅当窗口时间超过5分钟时,才将分钟四舍五入到最近的四分之一,c#,asp.net,datetime,C#,Asp.net,Datetime,我想把时间四舍五入到最接近的四分之一上下,只要差值超过5分钟。 我的日期时间格式为“2019/02/19 10:05 AM” 10:05=10:00 10:06=10:15 10:20=10:15 10:21=10:30 等等 如果差值小于5分钟,则四舍五入至0,15,30,45;如果差值大于5分钟,则四舍五入至0,15,30,45 让我知道我如何才能做到这一点。 谢谢 您可以使用模运算: static DateTime RoundTime(DateTime dt, int roundI

我想把时间四舍五入到最接近的四分之一上下,只要差值超过5分钟。 我的日期时间格式为“2019/02/19 10:05 AM”

10:05=10:00
10:06=10:15
10:20=10:15
10:21=10:30
等等

如果差值小于5分钟,则四舍五入至0,15,30,45;如果差值大于5分钟,则四舍五入至0,15,30,45 让我知道我如何才能做到这一点。
谢谢

您可以使用模运算:

    static DateTime RoundTime(DateTime dt, int roundInterval, int roundPoint)
    {
        TimeSpan ts = dt.TimeOfDay;
        int modInterval = ts.Minutes % roundInterval;
        if (modInterval < roundPoint || (modInterval == roundPoint && ts.Seconds == 0 && ts.Milliseconds == 0))
        {
            return dt.Subtract(new TimeSpan(0, modInterval, ts.Seconds));
        } else
        {
            return dt.Add(new TimeSpan(0, roundInterval - modInterval, -ts.Seconds));
        }
    }

然后,您可以根据需要格式化返回的DateTime(“AM”/“PM”等)

搜索找到此方法,该方法将四舍五入到最近的一刻钟

private DateTime MyRoundTime(DateTime date)
{
  TimeSpan roundMins = TimeSpan.FromMinutes(15); 
  return new DateTime(((date.Ticks + (roundMins.Ticks - 1)/2) / roundMins.Ticks) * roundMins.Ticks);
}
这将在一刻钟后7.5分钟结束。你想要的是在第5分钟后进行汇总,因此只需在原来的时间基础上增加2.5分钟即可

private DateTime MyRoundTime(DateTime date)
{
  TimeSpan roundMins = TimeSpan.FromMinutes(15);
  date += TimeSpan.FromMinutes(2.5);
  return new DateTime(((date.Ticks + (roundMins.Ticks - 1)/2) / roundMins.Ticks) * roundMins.Ticks);
}

如果你能分享到目前为止的进展,那将是非常棒的。@mjwills for 10:05:30也应该是10:15。你可能的复制品可以通过尝试一些东西来实现这一点,如果那不起作用,然后请求帮助。堆栈溢出不存在,无法为您编写代码。我认为这不会产生op要求的结果。首先,你不考虑秒I:10:0:01会导致10:05:00(或01)。然后,OP要求如果差异小于5分钟,则四舍五入到0,15,30,45;如果差异大于5分钟,则四舍五入到0,15,30,45。你的解决方案总是以5分钟为间隔-史蒂夫,这就是我要找的。你解释得更清楚了。这似乎符合要求。谢谢!这就是我要找的@保尔夫
private DateTime MyRoundTime(DateTime date)
{
  TimeSpan roundMins = TimeSpan.FromMinutes(15);
  date += TimeSpan.FromMinutes(2.5);
  return new DateTime(((date.Ticks + (roundMins.Ticks - 1)/2) / roundMins.Ticks) * roundMins.Ticks);
}