public void get_next_and_last_tuesday()
        {
            var a_saturday = new DateTime(2011, 8, 20);

            var nextTuesday = a_saturday.NextDayOfWeek(DayOfWeek.Tuesday);
            var lastTuesday = a_saturday.LastDayOfWeek(DayOfWeek.Tuesday);
            Assert.IsTrue((nextTuesday.DayOfWeek == DayOfWeek.Tuesday) && (nextTuesday == new DateTime(2011, 8, 23)));
            Assert.IsTrue((lastTuesday.DayOfWeek == DayOfWeek.Tuesday) && (lastTuesday == new DateTime(2011, 8, 16)));
        }
        public void LastDayOfWeek()
        {
            // Type
            var @this = new DateTime(2014, 01, 24);

            // Exemples
            DateTime result = @this.LastDayOfWeek(); // return "2014/01/25";

            // Unit Test
            Assert.AreEqual(new DateTime(2014, 01, 25), result.Date);
        }
        public void LastDayOfWeekTestCase()
        {
            var dateTime = new DateTime( 2014, 3, 30 );
            var actual = dateTime.LastDayOfWeek();

            Assert.AreEqual( dateTime, actual );

            dateTime = new DateTime( 2014, 3, 28 );
            actual = dateTime.LastDayOfWeek();

            Assert.AreEqual( new DateTime( 2014, 3, 30 ), actual );
        }
示例#4
0
        /// <summary>
        /// Subtracts the given calendar day and returns one or more new calendar entities representing the same data.
        /// </summary>
        public static IEnumerable<Calendar> Subtract(this Calendar calendar, DateTime day)
        {
            if (!calendar.CoversDate(day))
            { // no work needs to be done.
                return new Calendar[] { calendar };
            }

            var firstDayOfWeek = day.FirstDayOfWeek();
            var lastDayOfWeek = day.LastDayOfWeek();

            if(firstDayOfWeek <= calendar.StartDate &&
               lastDayOfWeek >= calendar.EndDate)
            { // yay! this is exceptional but let's take advantage of this.
                calendar[day.DayOfWeek] = false;
                return new Calendar[] { calendar };
            }

            // possibly split in two or three pieces.
            if(firstDayOfWeek <= calendar.StartDate)
            { // two pieces, a first week with the day substracted and the rest.
                var subtracted = new Calendar()
                {
                    StartDate = calendar.StartDate,
                    EndDate = lastDayOfWeek
                };
                subtracted.CopyWeekPatternFrom(calendar);
                subtracted[day.DayOfWeek] = false;

                var rest = new Calendar()
                {
                    StartDate = lastDayOfWeek.AddDays(1),
                    EndDate = calendar.EndDate
                };
                rest.CopyWeekPatternFrom(calendar);
                return new Calendar[] { subtracted, rest };
            }
            else if (lastDayOfWeek >= calendar.EndDate)
            { // two pieces, a last week with the day substracted and the rest.
                var rest = new Calendar()
                {
                    StartDate = calendar.StartDate,
                    EndDate = firstDayOfWeek.AddDays(-1)
                };
                rest.CopyWeekPatternFrom(calendar);

                var subtracted = new Calendar()
                {
                    StartDate = firstDayOfWeek,
                    EndDate = calendar.EndDate
                };
                subtracted.CopyWeekPatternFrom(calendar);
                subtracted[day.DayOfWeek] = false;
                return new Calendar[] { rest, subtracted };
            }
            else
            { // three pieces, a first period, a week with the day subtracted and a last period.
                var rest1 = new Calendar()
                {
                    StartDate = calendar.StartDate,
                    EndDate = firstDayOfWeek.AddDays(-1)
                };
                rest1.CopyWeekPatternFrom(calendar);

                var subtracted = new Calendar()
                {
                    StartDate = firstDayOfWeek,
                    EndDate = lastDayOfWeek
                };
                subtracted.CopyWeekPatternFrom(calendar);
                subtracted[day.DayOfWeek] = false;

                var rest2 = new Calendar()
                {
                    StartDate = lastDayOfWeek.AddDays(1),
                    EndDate = calendar.EndDate
                };
                rest2.CopyWeekPatternFrom(calendar);
                return new Calendar[] { rest1, subtracted, rest2 };
            }
        }