Exemplo n.º 1
0
 /// <summary>
 /// Public holidays which are always on the same day, e.g. Anzac Day on April 25th every year
 /// </summary>
 /// <param name="dayOfMonth">Fix Date</param>
 /// <param name="monthOfYear">Fix Month</param>
 /// <param name="isNextMonday">If true, the actual holiday will fall on the following Monday when that hoilday falls on a weekend.</param>
 public HolidayRule(int dayOfMonth, int monthOfYear, bool isNextMonday = false)
 {
     this.DateOfMonth    = dayOfMonth;
     this.MonthOfYear    = monthOfYear;
     this.IsNextMonday   = isNextMonday;
     this.holidayChecker = new SameDateChecker();
 }
Exemplo n.º 2
0
 /// <summary>
 ///  Public holidays on a certain occurrence of a certain day in a month. e.g. Queen's Birthday on the second Monday in June every year.
 /// </summary>
 /// <param name="monthOfYear">Month</param>
 /// <param name="weekOfMonth">Week of Month</param>
 /// <param name="holidayOfWeek">Which day of week is holiday</param>
 public HolidayRule(int monthOfYear, int weekOfMonth, DayOfWeek holidayOfWeek)
 {
     this.HolidayOfWeek  = holidayOfWeek;
     this.WeekOfMonth    = weekOfMonth;
     this.MonthOfYear    = monthOfYear;
     this.holidayChecker = new FixDayOfWeekMonth();
 }
Exemplo n.º 3
0
 public TollCalculator(IFeeFreeVehicleChecker feeFreeVehicleChecker, IWeekendChecker weekendChecker, IHolidayChecker holidayChecker, IDailyFeeCalculator dailyFeeCalculator)
 {
     this.feeFreeVehicleChecker = feeFreeVehicleChecker;
     this.weekendChecker        = weekendChecker;
     this.holidayChecker        = holidayChecker;
     this.dailyFeeCalculator    = dailyFeeCalculator;
 }
Exemplo n.º 4
0
 /// <summary>
 /// Creates instance of class
 /// </summary>
 /// <param name="dbContext"><see cref="CurrencyDbContext"/></param>
 /// <param name="holidayChecker"><see cref="IHolidayChecker"/></param>
 public CacheDatabase(CurrencyDbContext dbContext, IHolidayChecker holidayChecker)
 {
     _dbContext      = dbContext;
     _holidayChecker = holidayChecker;
 }
Exemplo n.º 5
0
 /// <summary>
 /// Creates instance of class
 /// </summary>
 /// <param name="holidayChecker"><see cref="IHolidayChecker"/></param>
 public DateService(IHolidayChecker holidayChecker)
 {
     _holidayChecker = holidayChecker;
 }
Exemplo n.º 6
0
        /// <summary>
        /// カレンダーを示す 2 次元配列を生成します。
        /// </summary>
        /// <param name="year">生成するカレンダーの年。</param>
        /// <param name="month">生成するカレンダーの月。</param>
        /// <param name="holidayChecker">カレンダー生成の際に利用する <see cref="IHolidayChecker" />></param>
        /// <param name="days">日が格納された 2 次元配列 (6 * 7)。最終行が 5 行目の時は 6 行目は -1 となります。</param>
        /// <param name="isHoliday">対応する日が祝日かを示す 2 次元配列 (6 * 7)。</param>
        /// <param name="isThisMonth">配列に格納された日が、指定された月であるか、空白を埋めるための先月 or 来月であるかを示す 2 次元配列 (6 * 7)。</param>
        /// <param name="lastRow">最終行を示します。</param>
        public static void GetCalendar(int year, int month, IHolidayChecker holidayChecker, out int[,] days, out bool[,] isHoliday, out bool[,] isThisMonth, out int lastRow)
        {
            days        = new int[6, 7];
            isHoliday   = new bool[6, 7];
            isThisMonth = new bool[6, 7];

            var beginDayOfWeek = (int)(new DateTime(year, month, 1).DayOfWeek);


            int endDay;

            if (month == 12)
            {
                endDay = (new DateTime(year + 1, 1, 1) - TimeSpan.FromDays(1)).Day;
            }
            else
            {
                endDay = (new DateTime(year, month + 1, 1) - TimeSpan.FromDays(1)).Day;
            }

            int endDayOfPrev = (new DateTime(year, month, 1) - TimeSpan.FromDays(1)).Day;

            int day      = 1;
            int startRow = 0;

            if (beginDayOfWeek == 0)
            {
                startRow = 1;
            }
            int prevDay = endDayOfPrev - beginDayOfWeek + 1;

            if (beginDayOfWeek == 0)
            {
                prevDay -= 7;
            }
            int nextDay = 1;

            lastRow = -1;
            for (int i = 0; i < days.GetLength(0); i++)
            {
                for (int j = 0; j < days.GetLength(1); j++)
                {
                    if (i < startRow || i == startRow && j < beginDayOfWeek)
                    {
                        days[i, j]        = prevDay;
                        isThisMonth[i, j] = false;

                        if (month == 1)
                        {
                            if (holidayChecker == null)
                            {
                                isHoliday[i, j] = false;
                            }
                            else
                            {
                                isHoliday[i, j] = holidayChecker.IsHoliday(year - 1, 12, prevDay);
                            }
                        }
                        else
                        {
                            if (holidayChecker == null)
                            {
                                isHoliday[i, j] = false;
                            }
                            else
                            {
                                isHoliday[i, j] = holidayChecker.IsHoliday(year, month - 1, prevDay);
                            }
                        }

                        prevDay++;
                    }
                    else if (day <= endDay)
                    {
                        days[i, j]        = day;
                        isThisMonth[i, j] = true;

                        if (holidayChecker == null)
                        {
                            isHoliday[i, j] = false;
                        }
                        else
                        {
                            isHoliday[i, j] = holidayChecker.IsHoliday(year, month, day);
                        }

                        day++;
                    }
                    else
                    {
                        if (lastRow < 0)
                        {
                            lastRow = i;
                        }
                        if (lastRow == i)
                        {
                            days[i, j]        = nextDay;
                            isThisMonth[i, j] = false;

                            if (month == 12)
                            {
                                if (holidayChecker == null)
                                {
                                    isHoliday[i, j] = false;
                                }
                                else
                                {
                                    isHoliday[i, j] = holidayChecker.IsHoliday(year + 1, 1, nextDay);
                                }
                            }
                            else
                            {
                                if (holidayChecker == null)
                                {
                                    isHoliday[i, j] = false;
                                }
                                else
                                {
                                    isHoliday[i, j] = holidayChecker.IsHoliday(year, month + 1, nextDay);
                                }
                            }

                            nextDay++;
                        }
                        else
                        {
                            days[i, j]        = -1;
                            isThisMonth[i, j] = false;
                            isHoliday[i, j]   = false;
                        }
                    }
                }
            }
        }