protected static DateTime NextCheckDate()

in src/log4net/Appender/RollingFileAppender.cs [1403:1466]


  protected static DateTime NextCheckDate(DateTime currentDateTime, RollPoint rollPoint)
  {
    // Local variable to work on (this does not look very efficient)
    DateTime current = currentDateTime;

    // Do slightly different things depending on what the type of roll point we want.
    switch (rollPoint)
    {
      case RollPoint.TopOfMinute:
        current = current.AddMilliseconds(-current.Millisecond);
        current = current.AddSeconds(-current.Second);
        current = current.AddMinutes(1);
        break;

      case RollPoint.TopOfHour:
        current = current.AddMilliseconds(-current.Millisecond);
        current = current.AddSeconds(-current.Second);
        current = current.AddMinutes(-current.Minute);
        current = current.AddHours(1);
        break;

      case RollPoint.HalfDay:
        current = current.AddMilliseconds(-current.Millisecond);
        current = current.AddSeconds(-current.Second);
        current = current.AddMinutes(-current.Minute);

        if (current.Hour < 12)
        {
          current = current.AddHours(12 - current.Hour);
        }
        else
        {
          current = current.AddHours(-current.Hour);
          current = current.AddDays(1);
        }
        break;

      case RollPoint.TopOfDay:
        current = current.AddMilliseconds(-current.Millisecond);
        current = current.AddSeconds(-current.Second);
        current = current.AddMinutes(-current.Minute);
        current = current.AddHours(-current.Hour);
        current = current.AddDays(1);
        break;

      case RollPoint.TopOfWeek:
        current = current.AddMilliseconds(-current.Millisecond);
        current = current.AddSeconds(-current.Second);
        current = current.AddMinutes(-current.Minute);
        current = current.AddHours(-current.Hour);
        current = current.AddDays(7 - (int)current.DayOfWeek);
        break;

      case RollPoint.TopOfMonth:
        current = current.AddMilliseconds(-current.Millisecond);
        current = current.AddSeconds(-current.Second);
        current = current.AddMinutes(-current.Minute);
        current = current.AddHours(-current.Hour);
        current = current.AddDays(1 - current.Day); /* first day of month is 1 not 0 */
        current = current.AddMonths(1);
        break;
    }
    return current;
  }