dtb*_*dtb 20

DateTime RoundDown(DateTime dt, TimeSpan d)
{
    return new DateTime((dt.Ticks / d.Ticks) * d.Ticks);
}
Run Code Online (Sandbox Code Playgroud)

例:

var dt1 = RoundDown(DateTime.Parse("2011-08-11 16:59"), TimeSpan.FromMinutes(30));
// dt1 == {11/08/2011 16:30:00}

var dt2 = RoundDown(DateTime.Parse("2011-08-11 17:00"), TimeSpan.FromMinutes(30));
// dt2 == {11/08/2011 17:00:00}

var dt3 = RoundDown(DateTime.Parse("2011-08-11 17:01"), TimeSpan.FromMinutes(30));
// dt3 == {11/08/2011 17:00:00}
Run Code Online (Sandbox Code Playgroud)


Bit*_*KFu 16

我会说那样的话

var time = DateTime.Now;
var rounded = time.AddMinutes(
        time.Minute>30 ? -(time.Minute-30) : -time.Minute) 
Run Code Online (Sandbox Code Playgroud)

你甚至可以做自己的扩展

public static class TimeHelper {
   public static DateTime RoundDown (this DateTime time)
   {
       return time.AddMinutes(
         time.Minute>30 ? -(time.Minute-30) : -time.Minute);
   }
}
Run Code Online (Sandbox Code Playgroud)

编辑

如果需要,此功能还会减少秒/毫秒.谢谢你的提示.

public static DateTime RoundDown(this DateTime time)
{
    return time.Subtract(
        new TimeSpan(0, 0, time.Minute > 30 ? (time.Minute - 30) : time.Minute, 
            time.Second, time.Millisecond));
}
Run Code Online (Sandbox Code Playgroud)

  • +1一个不会丢弃`DateTime.Kind`值的解决方案:) (2认同)