C# DotNet Roundoff datetime持续15分钟

C# DotNet Roundoff datetime持续15分钟,c#,.net,C#,.net,是否有函数将日期时间四舍五入到最后一个季度 例如 08:03:00 becomes 08:00:00 08:14:00 becomes 08:00:00 08:15:00 stays 08:15:00 08:16:00 becomes 08:15:00 08:29:00 becomes 08:15:00 08:45:00 stays 08:45:00 08:55:00 becomes 08:45:00 09:01:00 becomes 09:00:00 我已经编写了下面

是否有函数将日期时间四舍五入到最后一个季度

例如

08:03:00 becomes 08:00:00

08:14:00 becomes 08:00:00

08:15:00 stays   08:15:00

08:16:00 becomes 08:15:00

08:29:00 becomes 08:15:00

08:45:00 stays   08:45:00 

08:55:00 becomes 08:45:00

09:01:00 becomes 09:00:00
我已经编写了下面的函数,但是它返回下一个季度

private DateTime RoundUpToPreviousQuarter(DateTime date, TimeSpan d)
{
      return new DateTime(((date.Ticks + d.Ticks - 1) / d.Ticks) * d.Ticks);
}

// call the method
this.RoundUp(time, TimeSpan.FromMinutes(15));
任何意见都值得赞赏

将您的方法更改为:

private DateTime RoundUpToPreviousQuarter(DateTime date, TimeSpan d)
{
    return new DateTime(((date.Ticks) / d.Ticks) * d.Ticks);
}

选中此选项,它对我有效。

将模15应用于datetime Minute属性,并从同一属性中减去该值

DateTime dt = new DateTime(2013,5,28, 15, 59,0);
dt = dt.AddMinutes(-(dt.Minute % 15));
在本例中,我创建了一个零秒日期时间。如果您还需要删除秒数

DateTime dt = new DateTime(2013,5,28, 15, 59,45);
dt = dt.AddMinutes(-(dt.Minute % 15)).AddSeconds(-dt.Second);

那么秒呢?它们将保持不变,我怀疑OP是否需要这样的舍入。不需要秒。仅分钟。将在08:45:00失败此包含一个关闭一个错误。应该是
(date.Ticks/d.Ticks)*d.Ticks
。请参见@SergeyS立即更改,以便在08:45:00时不会失败。如果该方法接受要舍入的可变时间跨度,为什么该方法称为RoundUpPreviousQuarter?像RoundUp这样的名字更合适