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);
}
}