示例#1
0
        private DateTime GetNextDate(DateTime dt, int xDayOfMonth, MonthOfTheYear monthOfYear, int everyXYears)
        {
            int daysOfMonth = DateTime.DaysInMonth(dt.Year, dt.Month);

            do
            {
                if (nextTentativeDate == DateTime.MinValue && (MonthOfTheYear)dt.Month == monthOfYear && dt.Day <= xDayOfMonth && xDayOfMonth <= daysOfMonth)
                {
                    nextTentativeDate = new DateTime(dt.Year, Convert.ToInt16(monthOfYear), xDayOfMonth, dt.Hour, dt.Minute, 0);
                }
                else
                {
                    dt          = dt.AddYears(everyXYears);
                    daysOfMonth = DateTime.DaysInMonth(dt.Year, Convert.ToInt16(monthOfYear));
                    if (xDayOfMonth <= daysOfMonth)
                    {
                        nextTentativeDate = new DateTime(dt.Year, Convert.ToInt16(monthOfYear), xDayOfMonth, dt.Hour, dt.Minute, 0);
                    }
                    else
                    {
                        nextTentativeDate = new DateTime(dt.Year, Convert.ToInt16(monthOfYear), daysOfMonth, dt.Hour, dt.Minute, 0);
                    }
                }
            } while (nextTentativeDate <= utc);

            return(nextTentativeDate);
        }
示例#2
0
        public override int GetHashCode()
        {
            var hashCode = -1865746542;

            hashCode = hashCode * -1521134295 + MonthOfTheYear.GetHashCode();
            hashCode = hashCode * -1521134295 + Year.GetHashCode();
            return(hashCode);
        }
示例#3
0
 public Month(MonthOfTheYear name)
 {
     this.Name = name;
     if ((int)Name <= 7)
     {
         if ((int)Name == 1 && CountDecembers == 0)
         {
             StartDay = RandomDay();
             GenerateDays(31);
         }
         else if ((int)Name == 1 && CountDecembers > 0)
         {
             GenerateDays(31);
         }
         if ((int)Name == 2)
         {
             GenerateDays(28);
         }
         if ((int)Name != 1 && (int)Name % 2 != 0)
         {
             GenerateDays(31);
         }
         if ((int)Name % 2 == 0 && (int)Name != 2)
         {
             GenerateDays(30);
         }
     }
     else
     {
         if ((int)Name % 2 != 0)
         {
             GenerateDays(30);
         }
         else if ((int)Name % 2 == 0 && (int)Name != 12)
         {
             GenerateDays(31);
         }
         else if ((int)Name == 12)
         {
             GenerateDays(31);
             CountDecembers++;
         }
     }
 }
示例#4
0
        public DateTime?GetNextYearlyScheduleDate(Schedule schedule, DateTime scheduledDate)
        {
            processDate  = scheduledDate;
            nextSchedule = processDate;
            var hours = processDate.Hour;
            var min   = processDate.Minute;

            if (schedule.YearlySchedule != null)
            {
                int            everyXYears = schedule.YearlySchedule.YearsInterval;
                int            xDayOfMonth = schedule.YearlySchedule.DayOfMonth;
                MonthOfTheYear monthOfYear = schedule.YearlySchedule.Month;

                if (processDate == schedule.StartBoundary)
                {
                    do
                    {
                        nextTentativeDate = GetNextDate(processDate, xDayOfMonth, monthOfYear, everyXYears);
                    } while (nextTentativeDate <= utc && nextTentativeDate < schedule.StartBoundary);
                }
                else
                {
                    do
                    {
                        processDate = processDate.AddYears(everyXYears);
                        int daysOfMonth = DateTime.DaysInMonth(processDate.Year, Convert.ToInt16(monthOfYear));
                        if (xDayOfMonth <= daysOfMonth)
                        {
                            nextTentativeDate = new DateTime(processDate.Year, Convert.ToInt16(monthOfYear), xDayOfMonth, processDate.Hour, processDate.Minute, processDate.Second);
                        }
                        else
                        {
                            nextTentativeDate = new DateTime(processDate.Year, Convert.ToInt16(monthOfYear), daysOfMonth);
                        }
                    } while (nextTentativeDate <= utc);
                }

                #region
                nextTentativeDate = new DateTime(nextTentativeDate.Year, nextTentativeDate.Month, nextTentativeDate.Day, hours, min, 0);
                switch (schedule.EndType)
                {
                case EndType.EndDate:
                    if (nextTentativeDate <= schedule.EndBoundary)
                    {
                        nextSchedule = nextTentativeDate;
                    }
                    else
                    {
                        nextSchedule = null;
                    }
                    break;

                case EndType.NoEndDate:
                    nextSchedule = nextTentativeDate;
                    break;

                case EndType.EndAfter:
                    DataTable dataTable    = new DataTable();
                    var       whereColumns = new List <ConditionColumn>();
                    whereColumns.Add(new ConditionColumn
                    {
                        ColumnName = GlobalAppSettings.DbColumns.DB_ScheduleLog.ScheduleId,
                        Condition  = Conditions.Equals,
                        Value      = schedule.ScheduleId
                    });
                    whereColumns.Add(new ConditionColumn
                    {
                        ColumnName      = GlobalAppSettings.DbColumns.DB_ScheduleLog.ExecutedDate,
                        Condition       = Conditions.GreaterThanOrEquals,
                        Value           = schedule.StartBoundary,
                        LogicalOperator = LogicalOperators.AND
                    });
                    whereColumns.Add(new ConditionColumn
                    {
                        ColumnName      = GlobalAppSettings.DbColumns.DB_ScheduleLog.IsOnDemand,
                        Condition       = Conditions.GreaterThanOrEquals,
                        Value           = false,
                        LogicalOperator = LogicalOperators.AND
                    });
                    try
                    {
                        dataTable =
                            dataProvider.ExecuteReaderQuery(
                                queryBuilder.SelectAllRecordsFromTable(
                                    GlobalAppSettings.DbColumns.DB_ScheduleLog.DB_TableName, whereColumns))
                            .DataTable;
                        var recurrenceCount = dataTable.Rows.Count;
                        if (recurrenceCount > 0)
                        {
                            if (recurrenceCount < schedule.Occurrences)
                            {
                                nextSchedule = nextTentativeDate;
                            }
                            else
                            {
                                nextSchedule = null;
                            }
                        }
                        else
                        {
                            nextSchedule = nextTentativeDate;
                        }
                    }
                    catch (SqlException e)
                    {
                    }
                    break;
                }
                #endregion
            }
            return(nextSchedule);
        }
示例#5
0
 public static int ToInt(this MonthOfTheYear monthOfTheYear)
 {
     return((int)monthOfTheYear + 1);
 }
示例#6
0
        public Month(MonthOfTheYear name)
        {
            Name = name;
            if (Name == MonthOfTheYear.Jan ||
                Name == MonthOfTheYear.Mar ||
                Name == MonthOfTheYear.May ||
                Name == MonthOfTheYear.Jul ||
                Name == MonthOfTheYear.Aug ||
                Name == MonthOfTheYear.Oct ||
                Name == MonthOfTheYear.Dec)
            {
                for (int i = 1; i <= 31; i++)
                {
                    if (i % 7 == 1)
                    {
                        Days.Add(new Day(DayOfTheWeek.Mon, i));
                    }
                    if (i % 7 == 2)
                    {
                        Days.Add(new Day(DayOfTheWeek.Tue, i));
                    }
                    if (i % 7 == 3)
                    {
                        Days.Add(new Day(DayOfTheWeek.Wed, i));
                    }
                    if (i % 7 == 4)
                    {
                        Days.Add(new Day(DayOfTheWeek.Thu, i));
                    }
                    if (i % 7 == 5)
                    {
                        Days.Add(new Day(DayOfTheWeek.Fri, i));
                    }
                    if (i % 7 == 6)
                    {
                        Days.Add(new Day(DayOfTheWeek.Sat, i));
                    }
                    if (i % 7 == 0)
                    {
                        Days.Add(new Day(DayOfTheWeek.Sun, i));
                    }
                }
            }
            else
            {
                if (Name == MonthOfTheYear.Apr ||
                    Name == MonthOfTheYear.June ||
                    Name == MonthOfTheYear.Sep ||
                    Name == MonthOfTheYear.Nov)
                {
                    for (int i = 1; i <= 30; i++)
                    {
                        if (i % 7 == 1)
                        {
                            Days.Add(new Day(DayOfTheWeek.Mon, i));
                        }
                        if (i % 7 == 2)
                        {
                            Days.Add(new Day(DayOfTheWeek.Tue, i));
                        }
                        if (i % 7 == 3)
                        {
                            Days.Add(new Day(DayOfTheWeek.Wed, i));
                        }
                        if (i % 7 == 4)
                        {
                            Days.Add(new Day(DayOfTheWeek.Thu, i));
                        }
                        if (i % 7 == 5)
                        {
                            Days.Add(new Day(DayOfTheWeek.Fri, i));
                        }
                        if (i % 7 == 6)
                        {
                            Days.Add(new Day(DayOfTheWeek.Sat, i));
                        }
                        if (i % 7 == 0)
                        {
                            Days.Add(new Day(DayOfTheWeek.Sun, i));
                        }
                    }
                }
                else

                {
                    for (int i = 1; i <= 28; i++)
                    {
                        if (i % 7 == 1)
                        {
                            Days.Add(new Day(DayOfTheWeek.Mon, i));
                        }
                        if (i % 7 == 2)
                        {
                            Days.Add(new Day(DayOfTheWeek.Tue, i));
                        }
                        if (i % 7 == 3)
                        {
                            Days.Add(new Day(DayOfTheWeek.Wed, i));
                        }
                        if (i % 7 == 4)
                        {
                            Days.Add(new Day(DayOfTheWeek.Thu, i));
                        }
                        if (i % 7 == 5)
                        {
                            Days.Add(new Day(DayOfTheWeek.Fri, i));
                        }
                        if (i % 7 == 6)
                        {
                            Days.Add(new Day(DayOfTheWeek.Sat, i));
                        }
                        if (i % 7 == 0)
                        {
                            Days.Add(new Day(DayOfTheWeek.Sun, i));
                        }
                    }
                }
            }

            firstDay = Days[0];
            lastDay  = Days[Days.Count - 1];
        }
示例#7
0
 public Month GetMonth(MonthOfTheYear month) => new DateTime(_dateTime.Year, month.ToInt(), 1);