適切な丸めメカニズムを探していましたが、まさに必要なものが見つからないようです。
切り上げと切り捨てを別々に行う必要があり、すでに切り上げられている場合も考慮に入れる必要があります。
次の丸めを行う必要があります
5:00 -> RoundDown() -> 5:00
5:04 -> RoundDown() -> 5:00
5:09 -> RoundDown() -> 5:00
5:10 -> RoundDown() -> 5:10
4:00 -> RoundUp() -> 4:00
4:50 -> RoundUp() -> 4:50
4:51 -> RoundUp() -> 5:00
4:56 -> RoundUp() -> 5:00
基本的には、RoundUp() または RoundDown() を最も近い 10 分に明示的に指定する必要がありますが、すでに 10 分の倍数になっている場合は、そのままにしておく必要があります。また、丸め手順に影響を与えないように秒を切り捨てたいと思います
4:50:45 -> 4:50:00 -> RoundUp() -> 4:50
これを達成するための便利なコードはありますか。
私はこのコードをどこかで見つけましたが、すでに 10 の倍数であり、丸めを必要としないため、そのままにしておくのではなく、5:00 -> RoundUp() -> 5:10 に丸めます。また、秒数がどのように影響するかわかりません
public static DateTime RoundDateTime(this DateTime dt, int minutes, RoundingDirection direction)
{
TimeSpan t;
switch (direction)
{
case RoundingDirection.Up:
t = (dt.Subtract(DateTime.MinValue)).Add(new TimeSpan(0, minutes, 0)); break;
case RoundingDirection.Down:
t = (dt.Subtract(DateTime.MinValue)); break;
default:
t = (dt.Subtract(DateTime.MinValue)).Add(new TimeSpan(0, minutes / 2, 0)); break;
}
return DateTime.MinValue.Add(new TimeSpan(0,
(((int)t.TotalMinutes) / minutes) * minutes, 0));
}
誰かがそのメソッドを編集して、私のために機能することを願っています。ありがとう