是否有某种数学方法可以将 DateTime 缩短为精确的小时、天左右?类似于将小数舍入为 int。
期间.日期
如果原始值为 2011-01-01 13:00:00
,则最终值为 2011-01-01 00:00:00
如果 Period.Hour
如果原始值为 2011-03-11 13:32:00
,则最终值为 2011-03-11 13:00:00
我在想下面这样的事情。这当然可以正常工作,但是 range
-array 无论如何都会在稍后迭代。如果我可以直接在该迭代而不是它自己的迭代上进行计算,那就更好了。但是 someType 不能放入该迭代中(它取决于 someType)。
if (someType == Period.Day)
range.ForEach(d => d.time = new DateTime(d.time.Year, d.time.Month, d.time.Day,0,0,0));
if (someType == Period.Hour)
range.ForEach(d => d.time = new DateTime(d.time.Year, d.time.Month, d.time.Day, d.time.Hour, 0, 0));
最佳答案
四舍五入到一天等同于 time.Date
,四舍五入到最接近的(在中点上)就是 ( time + 12hours ).Date
。
四舍五入到整整一个小时,我想不出比您的代码更易读的代码了。要四舍五入到最接近的小时,您可以将代码应用于 time + 30mins
。
可能有一种更快的方法可以四舍五入到最近的小时:
const Int64 HourInTicks=...;
Int64 timeInTicks=time.Ticks;
Int64 trucatedToHour=timeInTicks-timeInTicks%HourInTicks;
但我会避免这种情况,除非您真的需要性能,这是不太可能的。
(如果您使用的是本地时间,那么在本地时间偏移发生变化的日子里,我到最近的回合可能会出现问题)
关于c# - 将日期时间削减/舍入为一个整体,即小时/天?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8080953/