2

是否有将日期时间四舍五入到上一季度的功能?

例子...

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

任何输入表示赞赏。

4

2 回答 2

10

将模 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);
于 2013-05-28T13:35:57.617 回答
3

将您的方法更改为:

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

检查了它对我有用。

于 2013-05-28T13:35:36.357 回答