• Source
    1. using System;
    2.  
    3. public class Test
    4. {
    5. public static void Main()
    6. {
    7. DateTime dateTime = DateTime.Now;
    8. Console.WriteLine($"{dateTime.ToString("yyyy-MM-dd HH:mm:ss.fff")}");
    9.  
    10. // 밀리초 단위에서 반올림
    11. Console.WriteLine($"{RoundToNearest(dateTime, TimeSpan.FromSeconds(1.0)).ToString("yyyy-MM-dd HH:mm:ss.fff")}");
    12.  
    13. // 초 단위에서 반올림
    14. Console.WriteLine($"{RoundToNearest(dateTime, TimeSpan.FromMinutes(1.0)).ToString("yyyy-MM-dd HH:mm:ss.fff")}");
    15. }
    16.  
    17. public static DateTime Truncate(DateTime dateTime, TimeSpan timeSpan)
    18. {
    19. if (timeSpan == TimeSpan.Zero)
    20. return dateTime;
    21. if (dateTime == DateTime.MinValue ||
    22. dateTime == DateTime.MaxValue)
    23. return dateTime;
    24. return dateTime.AddTicks(-(dateTime.Ticks % timeSpan.Ticks));
    25. }
    26.  
    27. public static DateTime RoundToNearest(DateTime dateTime, TimeSpan timeSpan)
    28. {
    29. long lDelta = dateTime.Ticks % timeSpan.Ticks;
    30. bool bIsRoundUp = lDelta > timeSpan.Ticks / 2;
    31. long lOffset = bIsRoundUp ? timeSpan.Ticks : 0;
    32.  
    33. return new DateTime(dateTime.Ticks + lOffset - lDelta, dateTime.Kind);
    34. }
    35. }