using System; public class Test { public static void Main() { DateTime dateTime = DateTime.Now; Console.WriteLine($"{dateTime.ToString("yyyy-MM-dd HH:mm:ss.fff")}"); // 밀리초 단위에서 반올림 Console.WriteLine($"{RoundToNearest(dateTime, TimeSpan.FromSeconds(1.0)).ToString("yyyy-MM-dd HH:mm:ss.fff")}"); // 초 단위에서 반올림 Console.WriteLine($"{RoundToNearest(dateTime, TimeSpan.FromMinutes(1.0)).ToString("yyyy-MM-dd HH:mm:ss.fff")}"); } public static DateTime Truncate(DateTime dateTime, TimeSpan timeSpan) { if (timeSpan == TimeSpan.Zero) return dateTime; if (dateTime == DateTime.MinValue || dateTime == DateTime.MaxValue) return dateTime; return dateTime.AddTicks(-(dateTime.Ticks % timeSpan.Ticks)); } public static DateTime RoundToNearest(DateTime dateTime, TimeSpan timeSpan) { long lDelta = dateTime.Ticks % timeSpan.Ticks; bool bIsRoundUp = lDelta > timeSpan.Ticks / 2; long lOffset = bIsRoundUp ? timeSpan.Ticks : 0; return new DateTime(dateTime.Ticks + lOffset - lDelta, dateTime.Kind); } }