} // SecondCustomCalendarHalfyearsTest private ITimeCalendar GetFiscalYearCalendar(FiscalYearAlignment yearAlignment) { return(new TimeCalendar( new TimeCalendarConfig { YearType = YearType.FiscalYear, YearBaseMonth = YearMonth.September, FiscalFirstDayOfYear = DayOfWeek.Sunday, FiscalYearAlignment = yearAlignment, FiscalQuarterGrouping = FiscalQuarterGrouping.FourFourFiveWeeks })); } // GetFiscalYearCalendar
} // GetYear // ---------------------------------------------------------------------- public static DateTime GetStartOfMonth(int year, YearMonth month, YearMonth yearBaseMonth, DayOfWeek yearStartDay, FiscalYearAlignment yearAlignment, FiscalQuarterGrouping quarterGrouping) { int diffMonthCount = month - yearBaseMonth; if (diffMonthCount < 0) { year--; diffMonthCount = TimeSpec.MonthsPerYear + diffMonthCount; } DateTime startOfYear = GetStartOfYear(year, yearBaseMonth, yearStartDay, yearAlignment); int fiveWeekMonthCount = (diffMonthCount + (int)quarterGrouping) / TimeSpec.MonthsPerQuarter; return(startOfYear.AddDays( (diffMonthCount * TimeSpec.FiscalDaysPerShortMonth) + (fiveWeekMonthCount * TimeSpec.DaysPerWeek))); } // GetStartOfMonth
} // GetStartOfQuarter #endregion #region Halfyear // ---------------------------------------------------------------------- public static DateTime GetStartOfHalfyear(int year, YearHalfyear halfyear, YearMonth yearBaseMonth, DayOfWeek yearStartDay, FiscalYearAlignment yearAlignment) { DateTime startOfYear = GetStartOfYear(year, yearBaseMonth, yearStartDay, yearAlignment); DateTime startOfHalfyear; switch (yearAlignment) { case FiscalYearAlignment.None: startOfHalfyear = startOfYear.AddMonths(((int)halfyear - 1) * TimeSpec.MonthsPerHalfyear); break; case FiscalYearAlignment.LastDay: case FiscalYearAlignment.NearestDay: startOfHalfyear = startOfYear.AddDays(((int)halfyear - 1) * TimeSpec.FiscalWeeksPerHalfyear * TimeSpec.DaysPerWeek); break; default: throw new InvalidOperationException(string.Format("unknown year alignment {0}", yearAlignment)); } return(startOfHalfyear); } // GetStartOfHalfyear
} // GetFiscalYear // ---------------------------------------------------------------------- public static DateTime GetStartOfYear(int year, YearMonth yearBaseMonth, DayOfWeek yearStartDay, FiscalYearAlignment yearAlignment) { DateTime startOfYear = new DateTime(year, (int)yearBaseMonth, 1); switch (yearAlignment) { case FiscalYearAlignment.None: break; case FiscalYearAlignment.LastDay: while (startOfYear.DayOfWeek != yearStartDay) { startOfYear = startOfYear.AddDays(-1); } break; case FiscalYearAlignment.NearestDay: int diffDayCount = Math.Abs((int)startOfYear.DayOfWeek - (int)yearStartDay); startOfYear = startOfYear.AddDays(diffDayCount > 3 ? TimeSpec.DaysPerWeek - diffDayCount : -diffDayCount); break; default: throw new InvalidOperationException(string.Format("unknown year alignment {0}", yearAlignment)); } return(startOfYear); } // GetStartOfYear