【问题标题】:c# Round minute to nearest quarter only if more than 5 minute window [closed]c#仅当窗口超过5分钟时才将分钟舍入到最近的四分之一[关闭]
【发布时间】:2019-02-19 10:24:24
【问题描述】:

只有当差值超过 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 让我知道如何实现这一目标。 谢谢!

【问题讨论】:

标签: c# asp.net datetime


【解决方案1】:

搜索发现这种方法会四舍五入到最接近的一刻钟

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

【讨论】:

  • 这似乎符合要求。
  • 谢谢!这就是我一直在寻找的。 @PaulF
【解决方案2】:

你可以使用模运算:

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

它接受一个日期时间和一个间隔并返回四舍五入的版本。打电话喜欢

    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”等)

【讨论】:

  • 我不认为这会产生操作要求的内容。首先,不要考虑秒 IE:10:00:01 应该导致 10:05:00(或 01)。然后 OP 要求如果 diff 少于 5 分钟,则向下舍入到 0、15、30、45,或者当 diff 超过 5 分钟时,向上舍入到 0、15、30、45。您的解决方案总是以 5 分钟为间隔进行四舍五入-
  • @Steve 这就是我要找的。你解释得更好了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-22
  • 2022-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-29
相关资源
最近更新 更多