计算下一次并四舍五入日期时间

卡尔900

我有像 2019-02-10 20:39:23 这样的日期时间,我想把这个时间四舍五入到与最近的一个相距 15 分钟的下一个。所以这意味着下一个应该是 2019-02-10 21:45:00 或者另一个例子 21:24:17 应该变成 21:45:00 ... 下面的代码工作正常,直到我有像 2019-02- 这样的日期时间- 10 23:54:20。然后下一个四舍五入应该是 2019-03-10 00:00:00 但我得到 2019-02-10 00:00:00。

这是我的做法:

static void Main(string[] args)
{
    DateTime dt = DateTime.Parse("2019-02-10 23:54:23");

    var interval = TimeSpan.FromMinutes(15);

     DateTime last = NextTime(dt, interval);

     Console.WriteLine(last);

    }

    private static DateTime NextTime(DateTime value, TimeSpan interval)
    {
        var temp = value.Add(new TimeSpan(interval.Ticks / 2));
        var time = new TimeSpan((temp.TimeOfDay.Ticks / interval.Ticks) * interval.Ticks);

        return value.Date.Add(time);
    }

对于输出,我得到 2019-02-10 00:00:00 而不是 2019-03-10 00:00:00

不知道为什么不转向第二天......

正在从错误的变量中计算返回值。使用temp代替value

 private static DateTime NextTime(DateTime value, TimeSpan interval)
 {
     var temp = value.Add(new TimeSpan(interval.Ticks / 2));
     var time = new TimeSpan((temp.TimeOfDay.Ticks / interval.Ticks) * interval.Ticks);

     return temp.Date.Add(time);
 }

这样做的原因是因为您将间隔添加到值中。如果它在午夜/一天结束时滚动,您value.Date将返回错误的一天。既然你存储了temp,你就可以退货temp.Date.Add(time)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章