仅当差异超过5分钟时,我才想将时间分钟向上和向下四舍五入。 我的日期时间格式为“ 2019/02/19 10:05 AM”
10:05 = 10:00
10:06 = 10:15
10:20 = 10:15
10:21 = 10:30
等等。
如果相差少于5分钟,则四舍五入为0,15,30,45;如果相差少于5分钟,则四舍五入为0,15,30,45 让我知道如何实现这一目标。 谢谢!
答案 0 :(得分:3)
搜索发现此方法将四舍五入到最接近的一刻钟
private DateTime MyRoundTime(DateTime date)
{
TimeSpan roundMins = TimeSpan.FromMinutes(15);
return new DateTime(((date.Ticks + (roundMins.Ticks - 1)/2) / roundMins.Ticks) * roundMins.Ticks);
}
这将在四分之一小时后的7.5分钟后取整。您想要在5分钟后四舍五入,因此只需将原始时间增加2.5分钟即可。
private DateTime MyRoundTime(DateTime date)
{
TimeSpan roundMins = TimeSpan.FromMinutes(15);
date += TimeSpan.FromMinutes(2.5);
return new DateTime(((date.Ticks + (roundMins.Ticks - 1)/2) / roundMins.Ticks) * roundMins.Ticks);
}
答案 1 :(得分:0)
您可以使用模块化算法:
static DateTime RoundTime(DateTime dt, int roundInterval, int roundPoint)
{
TimeSpan ts = dt.TimeOfDay;
int modInterval = ts.Minutes % roundInterval;
if (modInterval < roundPoint || (modInterval == roundPoint && ts.Seconds == 0 && ts.Milliseconds == 0))
{
return dt.Subtract(new TimeSpan(0, modInterval, ts.Seconds));
} else
{
return dt.Add(new TimeSpan(0, roundInterval - modInterval, -ts.Seconds));
}
}
它接受一个DateTime和一个间隔,并返回四舍五入的版本。打来电话
static void Main(string[] args)
{
Console.WriteLine(RoundTime(new DateTime(2019, 2, 19, 11, 35, 30), 15, 5));
Console.WriteLine(RoundTime(DateTime.Now, 15, 5));
Console.ReadLine();
}
然后您可以根据需要格式化返回的DateTime(“ AM” /“ PM”等)