特定の解像度で、タイムスタンプの期間終了日時を返す関数を作成しようとしています。たとえば、解像度が 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時間になるとすぐに、分を0で割り、例外を取得します.
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;
}