using System; public class Test { public static void Main() { { Extensions.EnableKindFix = false; var now = DateTime.Now.RoundToNearest(TimeSpan.FromMinutes(1)); Console.WriteLine(now + " --- " + now.Kind); var nowFT = now.ToFileTimeUtc(); var nowDT = DateTime.FromFileTime(nowFT); Console.WriteLine(nowDT); } { Extensions.EnableKindFix = true; var now = DateTime.Now.RoundToNearest(TimeSpan.FromMinutes(1)); Console.WriteLine(now + " --- " + now.Kind); var nowFT = now.ToFileTimeUtc(); var nowDT = DateTime.FromFileTime(nowFT); Console.WriteLine(nowDT); } } } static class Extensions { public static bool EnableKindFix { get; set; } public static DateTime RoundUp(this DateTime dt, TimeSpan d) { var delta = (d.Ticks - (dt.Ticks % d.Ticks)) % d.Ticks; return EnableKindFix ? new DateTime(dt.Ticks + delta, dt.Kind) : new DateTime(dt.Ticks + delta); } public static DateTime RoundDown(this DateTime dt, TimeSpan d) { var delta = dt.Ticks % d.Ticks; return EnableKindFix ? new DateTime(dt.Ticks - delta, dt.Kind) : new DateTime(dt.Ticks - delta); } public static DateTime RoundToNearest(this DateTime dt, TimeSpan d) { var delta = dt.Ticks % d.Ticks; bool roundUp = delta > d.Ticks / 2; return roundUp ? dt.RoundUp(d) : dt.RoundDown(d); } }