Exemplo n.º 1
0
        /// <summary>
        /// Determines the day kind for specified date in according to the month.
        /// </summary>
        public DayKind DetermineDayKindForDate(DateTime date)
        {
            DayKind dayKind = DayKind.General;

            if (date.DayOfWeek == DayOfWeek.Saturday || date.DayOfWeek == DayOfWeek.Sunday)
            {
                dayKind = DayKind.Weekend;
            }
            if (date.Month != Month || date.Year != Year)
            {
                dayKind = DayKind.Filler;
            }
            return(dayKind);
        }
        /// <summary>
        ///     Gets the last kind of day based on the passed day time.
        /// </summary>
        /// <param name="date">The  date</param>
        /// <returns>The DateTime associated with the last kind of day passed.</returns>
        public static DateTime GetLast(this DateTime date, DayKind dayKind)
        {
            if (dayKind <= DayKind.DayOfMonth)
            {
                int daysInMonth = DateTime.DaysInMonth(date.Year, date.Month);

                DateTime lastDayOfMonth = date.GetFirst(DayKind.DayOfMonth).AddDays(daysInMonth - 1);

                if (dayKind == DayKind.DayOfMonth)
                {
                    return(lastDayOfMonth);
                }

                int diff = (int)dayKind - (int)lastDayOfMonth.DayOfWeek;

                if (diff > 0)
                {
                    diff -= 7;
                }

                return(lastDayOfMonth.AddDays(diff));
            }

            if (dayKind <= DayKind.DayOfYear)
            {
                DateTime lastDayOfYear = date.Date.SetDate(month: 12, day: 31);

                if (dayKind == DayKind.DayOfYear)
                {
                    return(lastDayOfYear);
                }

                if (dayKind >= DayKind.SundayOfYear && dayKind <= DayKind.SaturdayOfYear)
                {
                    var inMonthDayKind = (DayKind)((int)dayKind & ~0b01000);

                    return(date.GetLast(inMonthDayKind));
                }
            }

            if (dayKind == DayKind.DayOfWeek)
            {
                return(date.DayOfWeek == DayOfWeek.Saturday ? date.Date : date.GetNext(DayOfWeek.Saturday));
            }

            throw new ArgumentOutOfRangeException(nameof(dayKind));
        }
        /// <summary>
        ///     Gets the first kind of day based on the passed day time.
        /// </summary>
        /// <param name="date">The date</param>
        /// <param name="dayKind">The kind of day</param>
        /// <returns>The DateTime associated with the first kind of day passed.</returns>
        public static DateTime GetFirst(this DateTime date, DayKind dayKind)
        {
            date = date.Date;

            if (dayKind <= DayKind.DayOfMonth)
            {
                DateTime firstDayOfMonth = date.AddDays(1 - date.Day);

                if (dayKind == DayKind.DayOfMonth)
                {
                    return(firstDayOfMonth);
                }

                if (firstDayOfMonth.DayOfWeek != (DayOfWeek)dayKind)
                {
                    return(firstDayOfMonth.GetNext((DayOfWeek)dayKind));
                }

                return(firstDayOfMonth);
            }

            if (dayKind <= DayKind.DayOfYear)
            {
                DateTime firstDayOfYear = date.SetDate(month: 1, day: 1);

                if (dayKind == DayKind.DayOfYear)
                {
                    return(firstDayOfYear);
                }

                if (dayKind >= DayKind.SundayOfYear && dayKind <= DayKind.SaturdayOfYear)
                {
                    var inMonthDayKind = (DayKind)((int)dayKind & ~0b01000);

                    return(date.GetFirst(inMonthDayKind));
                }
            }

            if (dayKind == DayKind.DayOfWeek)
            {
                return(date.DayOfWeek == DayOfWeek.Sunday ? date : date.GetPrevious(DayOfWeek.Sunday));
            }

            throw new ArgumentOutOfRangeException(nameof(dayKind));
        }
Exemplo n.º 4
0
 public TimePeriod(Int64 id, SimpleTime begin, SimpleTime end, DayKind dayKind)
 => (Id, Begin, End, DayKind) = (id, begin, end, dayKind);