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

时间:2019-02-19 10:24:24

标签: 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 让我知道如何实现这一目标。 谢谢!

2 个答案:

答案 0 :(得分:3)

搜索发现此方法将四舍五入到最接近的一刻钟

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);
}

答案 1 :(得分:0)

您可以使用模块化算法:

    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和一个间隔,并返回四舍五入的版本。打来电话

    static void Main(string[] args)
    {
        Console.WriteLine(RoundTime(new DateTime(2019, 2, 19, 11, 35, 30), 15, 5));
        Console.WriteLine(RoundTime(DateTime.Now, 15, 5));
        Console.ReadLine();
    }

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