あなたは次のようなものを試してみましたか?私は正常に
private static readonly long _ticksIn30Mins = TimeSpan.FromMinutes(30).Ticks;
protected DateTime GetRoundedTime(DateTime inputTime)
{
long currentTicks = inputTime.Ticks;
return new DateTime(currentTicks.RoundUp(_ticksIn30Mins));
}
public static class ExtensionMethods
{
public static long RoundUp(this long i, long toTicks)
{
return (long)(Math.Round(i/(double)toTicks,
MidpointRounding.AwayFromZero)) * toTicks;
}
}
これはRoundOff method from this previous question取る...次の時間、分、日などに切り上げると同様の方法を使用しています。 MidpointRoundingMode.AwayFromZeroを使用して常に丸めるように変更するだけです。最後に、あなたの丸め前と値を丸めた後は同じであり、その場合、(例えば30分)ダニの切り上げ量を増加さかどうかを確認後、午前12:30になってきて午前12時00分の特定の場合に対処する
この原理を実証テストコンソールアプリケーションのために
var currentTime = DateTime.Now;
var rounded = GetRoundedTime(currentTime);
if (rounded == currentTime)
{
rounded = new DateTime(rounded.Ticks + _ticksIn30Mins);
}
、下記を参照してください。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
private static readonly long _ticksIn30Mins = TimeSpan.FromMinutes(30).Ticks;
static void Main(string[] args)
{
WriteDateString(new DateTime(2012, 01, 18, 09, 45, 11, 152));
WriteDateString(new DateTime(2012, 01, 18, 12, 15, 11, 999));
WriteDateString(new DateTime(2012, 01, 18, 12, 00, 00, 000));
Console.ReadLine();
}
private static void WriteDateString(DateTime dateTime)
{
Console.WriteLine("Before: {0}, After: {1}", dateTime, GetRoundedTime(dateTime));
}
private static DateTime GetRoundedTime(DateTime inputTime)
{
long currentTicks = inputTime.Ticks;
var rounded = new DateTime(currentTicks.RoundUp(_ticksIn30Mins));
if (rounded == inputTime)
{
rounded = new DateTime(rounded.Ticks + _ticksIn30Mins);
}
return rounded;
}
}
public static class ExtensionMethods
{
public static long RoundUp(this long i, long toTicks)
{
return (long)(Math.Round(i/(double)toTicks, MidpointRounding.AwayFromZero)) * toTicks;
}
}
}
出力:
敬具、
なぜ午前12:00には午前12:30になる必要がありますか? 12:00 amは30分の倍数です。そして、あなたのコードによって、午前8時56分が丸められます。あなたのコードが正しいと思います。参照:[C#を最長X分に丸める](http://stackoverflow.com/questions/7029353/c-sharp-round-up-time-to-nearest-x-minutes/7029464#7029464) – dtb
12 :私は扱っているビジネスルールなので、00amは12:30になるはずです。 – Nosila