public void DayOfWeekInMonthShouldReturnExpectedResult()
 {
     var date = new DateTime( 2013, 3, 1 );
     var expected = new DateTime( 2013, 3, 11 );
     var actual = date.DayOfWeekInMonth( 2, DayOfWeek.Monday );
     Assert.Equal( expected.Date, actual.Date );
 }
 public void DayOfWeekInMonthWithCalendarShouldReturnExpectedResult()
 {
     var date = new DateTime( 2013, 3, 1 );
     var calendar = new GregorianFiscalCalendar( 7 );
     var expected = new DateTime( 2013, 3, 11 );
     var actual = date.DayOfWeekInMonth( 2, DayOfWeek.Monday, calendar );
     Assert.Equal( expected.Date, actual.Date );
 }
        public static DateTime DayOfWeekInMonth( this Calendar calendar, DateTime date, int occurrence, DayOfWeek dayOfWeek )
        {
            Arg.NotNull( calendar, nameof( calendar ) );
            Contract.Ensures( Contract.Result<DateTime>().Month == Contract.OldValue( date.Month ) );
            Contract.Ensures( Contract.Result<DateTime>().Year == Contract.OldValue( date.Year ) );
            Contract.Ensures( Contract.Result<DateTime>().DayOfWeek == dayOfWeek );
            Arg.GreaterThan( occurrence, 0, "occurrence" );

            return date.DayOfWeekInMonth( occurrence, dayOfWeek, calendar );
        }