我有像 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] 删除。
我来说两句