チャートアプリケーションの日付/時刻を最も近い間隔に丸めたい。次のような拡張メソッドシグネチャを使用して、任意のレベルの精度で丸めを実行できるようにします。
static DateTime Round(this DateTime date, TimeSpan span);
アイデアは、10分のタイムスパンを渡すと、最も近い10分の間隔に丸められるということです。私は実装を理解することができず、あなたの1人が以前に同様の何かを書いたり使用したりすることを望んでいます。
床、天井、または最も近い実装のいずれかで結構です。
何か案は?
編集:@tvanfossonと@ShuggyCoUkのおかげで、実装は次のようになります。
public static class DateExtensions {
public static DateTime Round(this DateTime date, TimeSpan span) {
long ticks = (date.Ticks + (span.Ticks / 2) + 1)/ span.Ticks;
return new DateTime(ticks * span.Ticks);
}
public static DateTime Floor(this DateTime date, TimeSpan span) {
long ticks = (date.Ticks / span.Ticks);
return new DateTime(ticks * span.Ticks);
}
public static DateTime Ceil(this DateTime date, TimeSpan span) {
long ticks = (date.Ticks + span.Ticks - 1) / span.Ticks;
return new DateTime(ticks * span.Ticks);
}
}
そして、そのように呼ばれます:
DateTime nearestHour = DateTime.Now.Round(new TimeSpan(1,0,0));
DateTime minuteCeiling = DateTime.Now.Ceil(new TimeSpan(0,1,0));
DateTime weekFloor = DateTime.Now.Floor(new TimeSpan(7,0,0,0));
...
乾杯!
1
ここでの実装の一部も役立つ可能性があります。stackoverflow.com
—
Matt Hamilton
の可能性のある複製DateTimeを特定の精度にトリミングするより良い方法はありますか
—
ランスロバーツ
元のDateTimeKindを新しく作成された日付exに追加することを忘れないでください:new DateTime(ticks * span.Ticks、date.Kind);
—
AM