我正在尝试创建一个函数,该函数针对给定的分辨率返回时间戳的期间结束日期时间。例如,如果分辨率为 10 分钟(存储为 TimeSpan),我的时间戳为 2012-08-14 12:34,则期间结束时间为 2012-08-14 12:40。下面的其他示例
Timestamp: 2012-08-14 1:15; Resolution: 01:00:00; Result: 2012-08-14 2:00
Timestamp: 2012-08-14 11:59; Resolution: 00:10:00; Result: 2012-08-14 12:00
Timestamp: 2012-08-14 12:00; Resolution: 00:10:00; Result: 2012-08-14 12:00
Timestamp: 2012-08-14 12:01; Resolution: 00:10:00; Result: 2012-08-14 12:10
我试图关注这篇文章(为 t-sql 编写),但在支持 15 分钟、60 分钟和 1 天的分辨率时遇到了麻烦
知道如何制作可以支持这些多个(和运行时间确定的)分辨率的动态解决方案吗?
编辑 这是我到目前为止所拥有的,只要您的分辨率小于 60 分钟,它就可以工作,但是一旦您的分辨率为 1 小时,您将分钟除以零并获得异常。
public static DateTime ConvertToPeriodEndingTimestamp(TimeSpan resolution, DateTime timestamp)
{
var modifiedDate = new DateTime();
var baseDate = new DateTime(2008, 01, 01, 00, 00, 00);
var cursor = baseDate;
var nowToBaseDateDifference = timestamp.Subtract(baseDate).TotalMinutes;
//SET @Result = DATEADD(MINUTE, (resolution.TotalMinutes * (nowtoBaseDateDifference / resolution.TotalMinutes)) + resolution.TotalMinutes, '20000101')
modifiedDate =
baseDate.AddMinutes(((resolution.TotalMinutes*(int)(nowToBaseDateDifference/resolution.TotalMinutes)) +
resolution.TotalMinutes));
if(timestamp.Minute % resolution.Minutes == 0)
modifiedDate = modifiedDate.Add(-resolution);
return modifiedDate;
}