c# - 将日期时间削减/舍入为一个整体,即小时/天?

标签 c#

是否有某种数学方法可以将 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/

相关文章:

c# - 格式化减去的日期 c#

c# - 在非 c# 文件中的 dotnet 新模板中添加可选内容

c# - 使用elasticsearch的日期过滤器,使用nest c#

c# - 如何向 CMD 发送一个有多个零的字符串?

c# - 创建一个唯一的字典并添加自动增加的整数值

c# - DataGridViewComboBoxCell : How to set selected value when adding a row?

c# - 如何构建涉及大量地理位置计算的应用程序?

c# - 如何通过单个属性将两个不同的 .NET 列表相交?

c# - 如何在 VBA 和 C# 中编码/解码 XML

c# - Linq to SQL .Any() 有多个条件?