Roundoff Timespan到15分钟的间隔

s-a*_*a-n 10 c#

我的代码中有一个属性,用户可以在HH:mm中输入一个时间跨度

10:32
10:44
15:45
Run Code Online (Sandbox Code Playgroud)

我想在我的房产到最近的15分钟,但我没有在这里的日期时间.我只需要使用Timespan

10:32 to 10:30
10:44 to 10:45
15:45 to 15:45
01:02 to 01:00
02:11 to 02:15
03:22 to 03:15
23:52 to 00:00
Run Code Online (Sandbox Code Playgroud)

尝试了所有这些解决方案,但它们涉及Datetime

如何将时间向上舍入到最接近的X分钟?
是否有一个简单的函数可以将日期时间向下舍入到最接近的30分钟,在C#中?
DotNet Roundoff日期时间持续15分钟

Bal*_*ick 15

我想你想要这样的东西:

public static class TimeSpanExtensions
{
    public static TimeSpan RoundToNearestMinutes(this TimeSpan input, int minutes)
    {
        var totalMinutes = (int)(input + new TimeSpan(0, minutes/2, 0)).TotalMinutes;

        return new TimeSpan(0, totalMinutes - totalMinutes % minutes, 0);
    }
}
Run Code Online (Sandbox Code Playgroud)

如果您传入15作为所选的舍入间隔,则该函数将首先添加7分钟,然后向下舍入到最接近的15分钟.这应该给你你想要的.

因为上面写的是扩展方法,你可以像这样使用它:

var span1 = new TimeSpan(0, 10, 37, 00).RoundToNearestMinutes(15);
var span2 = new TimeSpan(0, 10, 38, 00).RoundToNearestMinutes(15);
Run Code Online (Sandbox Code Playgroud)

第一个变为10:30,第二个变为10:45(根据需要).

  • 一个更简单的算法是:`return new TimeSpan(0,Math.Round(input.TotalMinutes/minutes)*minutes,0);` (3认同)
  • @san:这里的规则是什么?52 与 45 相差 *7 分钟*,但与 00 相差 *8 分钟*。那你为什么要四舍五入呢?另外,在您的要求中,您能解释一下为什么将 03:22 舍入到 03:25 吗?03:25 不是 15 分钟的倍数。我认为您可能需要更新您的问题以澄清这些要点。 (2认同)