public Subtract ( System.DateTime start, System.TimeSpan offset, SeekBoundaryMode seekBoundaryMode = SeekBoundaryMode.Next ) : DateTime? | ||
start | System.DateTime | 시작 시각 |
offset | System.TimeSpan | 기간(Duration) |
seekBoundaryMode | SeekBoundaryMode | 검색시 경계에 대한 모드 |
return | DateTime? |
public void PeriodLimitsSubtractTest() { var test = new DateTime(2011, 4, 30); var timeRange1 = new TimeRange(new DateTime(2011, 4, 20), new DateTime(2011, 4, 25)); var timeRange2 = new TimeRange(DateTime.MinValue, new DateTime(2011, 4, 6)); var calendarDateAdd = new CalendarDateAdd(); // 예외 기간을 설정합니다. 4월 10일 이전, 4월20일 ~ 4월25일 // calendarDateAdd.ExcludePeriods.Add(timeRange1); calendarDateAdd.ExcludePeriods.Add(timeRange2); calendarDateAdd.Subtract(test, DurationUtil.Days(1)).Should().Be(test.Subtract(DurationUtil.Days(1))); //! 4월 30일로부터 5일전이면 4월25일이지만, 예외기간이 4월20일~4월25일이므로, 4월20일을 반환합니다. // calendarDateAdd.Subtract(test, DurationUtil.Days(5)).Should().Be(timeRange1.Start); //! 4월 30일로부터 20일전이면, 4월10일 이지만 예외기간이 4월20일~4월25일이 있어 4월 5일이 되지만 4월 6일 이전은 예외기간이라 null을 반환합니다. // calendarDateAdd.Subtract(test, DurationUtil.Days(20)).HasValue.Should().Be.False(); calendarDateAdd.Add(test, DurationUtil.Days(3)).Should().Be(test.Add(DurationUtil.Days(3))); }
public void PeriodLimitsSubtractTest() { var test = new DateTime(2011, 4, 30); var timeRange1 = new TimeRange(new DateTime(2011, 4, 20), new DateTime(2011, 4, 25)); var timeRange2 = new TimeRange(DateTime.MinValue, new DateTime(2011, 4, 6)); var calendarDateAdd = new CalendarDateAdd(); // 예외 기간을 설정합니다. 4월 10일 이전, 4월20일 ~ 4월25일 // calendarDateAdd.ExcludePeriods.Add(timeRange1); calendarDateAdd.ExcludePeriods.Add(timeRange2); calendarDateAdd.Subtract(test, DurationUtil.Days(1)).Should().Be(test.Subtract(DurationUtil.Days(1))); //! 4월 30일로부터 5일전이면 4월25일이지만, 예외기간이 4월20일~4월25일이므로, 4월20일을 반환합니다. // calendarDateAdd.Subtract(test, DurationUtil.Days(5)).Should().Be(timeRange1.Start); //! 4월 30일로부터 20일전이면, 4월10일 이지만 예외기간이 4월20일~4월25일이 있어 4월 5일이 되지만 4월 6일 이전은 예외기간이라 null을 반환합니다. // calendarDateAdd.Subtract(test, DurationUtil.Days(20)).HasValue.Should().Be.False(); calendarDateAdd.Add(test, DurationUtil.Days(3)).Should().Be(test.Add(DurationUtil.Days(3))); }
public void PeriodLimitsAddTest() { var test = new DateTime(2011, 4, 12); var timeRange1 = new TimeRange(new DateTime(2011, 4, 20), new DateTime(2011, 4, 25)); // 4월 20일~4월25일 var timeRange2 = new TimeRange(new DateTime(2011, 4, 30), null); // 4월 30일 이후 var calendarDateAdd = new CalendarDateAdd(); // 예외 기간을 설정합니다. 4월20일 ~ 4월25일, 4월30일 이후 // calendarDateAdd.ExcludePeriods.Add(timeRange1); calendarDateAdd.ExcludePeriods.Add(timeRange2); calendarDateAdd.Add(test, DurationUtil.Day).Should().Be(test.Add(DurationUtil.Day)); //! 4월 12일에 8일을 더하면 4월 20일이지만, 20~25일까지 제외되므로, 4월 25일이 된다. // calendarDateAdd.Add(test, DurationUtil.Days(8)).Should().Be(timeRange1.End); //! 4월 20일에 20일을 더하면, 4월 20~25일 제외 후를 계산하면 4월 30일 이후가 된다. 하지만 4월 30일 이후는 제외가 되므로, 결과값은 null이 된다. // calendarDateAdd.Add(test, DurationUtil.Days(20)).HasValue.Should().Be.False(); calendarDateAdd.Subtract(test, DurationUtil.Days(3)).Should().Be(test.Subtract(DurationUtil.Days(3))); }
public void PeriodLimitsAddTest() { var test = new DateTime(2011, 4, 12); var timeRange1 = new TimeRange(new DateTime(2011, 4, 20), new DateTime(2011, 4, 25)); // 4월 20일~4월25일 var timeRange2 = new TimeRange(new DateTime(2011, 4, 30), null); // 4월 30일 이후 var calendarDateAdd = new CalendarDateAdd(); // 예외 기간을 설정합니다. 4월20일 ~ 4월25일, 4월30일 이후 // calendarDateAdd.ExcludePeriods.Add(timeRange1); calendarDateAdd.ExcludePeriods.Add(timeRange2); calendarDateAdd.Add(test, DurationUtil.Day).Should().Be(test.Add(DurationUtil.Day)); //! 4월 12일에 8일을 더하면 4월 20일이지만, 20~25일까지 제외되므로, 4월 25일이 된다. // calendarDateAdd.Add(test, DurationUtil.Days(8)).Should().Be(timeRange1.End); //! 4월 20일에 20일을 더하면, 4월 20~25일 제외 후를 계산하면 4월 30일 이후가 된다. 하지만 4월 30일 이후는 제외가 되므로, 결과값은 null이 된다. // calendarDateAdd.Add(test, DurationUtil.Days(20)).HasValue.Should().Be.False(); calendarDateAdd.Subtract(test, DurationUtil.Days(3)).Should().Be(test.Subtract(DurationUtil.Days(3))); }
public void NoPeriodTest() { var calendarDateAdd = new CalendarDateAdd(); var now = ClockProxy.Clock.Now; Enumerable .Range(-10, 20) .RunEach(index => { var offset = index * 5; calendarDateAdd.Add(now, DurationUtil.Days(offset)).Should().Be(now.Add(DurationUtil.Days(offset))); calendarDateAdd.Add(now, DurationUtil.Days(-offset)).Should().Be(now.Add(DurationUtil.Days(-offset))); calendarDateAdd.Subtract(now, DurationUtil.Days(offset)).Should().Be(now.Subtract(DurationUtil.Days(offset))); calendarDateAdd.Subtract(now, DurationUtil.Days(-offset)).Should().Be( now.Subtract(DurationUtil.Days(-offset))); }); }
public void NoPeriodTest() { var calendarDateAdd = new CalendarDateAdd(); var now = ClockProxy.Clock.Now; Enumerable .Range(-10, 20) .RunEach(index => { var offset = index * 5; calendarDateAdd.Add(now, DurationUtil.Days(offset)).Should().Be(now.Add(DurationUtil.Days(offset))); calendarDateAdd.Add(now, DurationUtil.Days(-offset)).Should().Be(now.Add(DurationUtil.Days(-offset))); calendarDateAdd.Subtract(now, DurationUtil.Days(offset)).Should().Be(now.Subtract(DurationUtil.Days(offset))); calendarDateAdd.Subtract(now, DurationUtil.Days(-offset)).Should().Be( now.Subtract(DurationUtil.Days(-offset))); }); }