我正在尝试将DateTime舍入到最近的7分钟。
我已经看到了许多用于c#的舍入函数,但是由于某些原因,我得到的结果与期望的结果不同。
给出以下时间:
var d = new DateTime(2019, 04, 15, 9, 40, 1, 0);
如果我想四舍五入到最近的7分钟,那么我希望答案是
2019-04-15 9:42:00 // 0, 7, 14, 21, 28, 35, 42 ?
输入/预期结果
new DateTime(2019, 04, 15, 9, 40, 0, 0); // 9:42
new DateTime(2019, 04, 15, 9, 03, 0, 0); // 9:07
new DateTime(2019, 04, 15, 9, 31, 0, 0); // 9:35
new DateTime(2019, 04, 15, 9, 21, 0, 0); // 9:21
new DateTime(2019, 04, 15, 9, 0, 0, 0); // 9:00
new DateTime(2019, 04, 15, 9, 58, 0, 0); // 10:00 (start again)
我所见过的各种DateTime舍入函数显示了以下答案,除非缺少某些内容,否则我无法理解为什么
9:41 or
9:43
舍入函数示例
public static DateTime RoundUp(this DateTime dt, TimeSpan d)
{
var modTicks = dt.Ticks % d.Ticks;
var delta = modTicks != 0 ? d.Ticks - modTicks : 0;
return new DateTime(dt.Ticks + delta, dt.Kind);
}
DateTime RoundUp(DateTime dt, TimeSpan d)
{
return new DateTime((dt.Ticks + d.Ticks - 1) / d.Ticks * d.Ticks, dt.Kind);
}
答案 0 :(得分:1)
static DateTime RoundUpNMinute(DateTime dt, int n)
{
var minute = dt.Minute;
if (minute % n == 0)
return dt;
var minuteRoundUp = minute / n * n + n;
if(minuteRoundUp > 60)
return new DateTime(dt.Year, dt.Month, dt.Day, dt.Hour, 0, 0, dt.Kind).AddHours(1);
else
return new DateTime(dt.Year, dt.Month, dt.Day, dt.Hour, minuteRoundUp, 0, dt.Kind);
}
所有示例的结果相同。