/// <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)); }
public TimePeriod(Int64 id, SimpleTime begin, SimpleTime end, DayKind dayKind) => (Id, Begin, End, DayKind) = (id, begin, end, dayKind);