internal static CalendarDate ToCalendarDate(OrdinalDate ordinalDate, CalendarDatePrecision precision) { if (precision == CalendarDatePrecision.Century) { return new CalendarDate(ISO8601Calculator.CenturyOfYear(ordinalDate.Year)); } if (precision == CalendarDatePrecision.Year) { return new CalendarDate(ordinalDate.Year); } var days = ISO8601Calculator.IsLeapYear(ordinalDate.Year) ? DaysToMonth366 : DaysToMonth365; var month = 0; var day = 0; for (int i = days.Length - 1; i >= 0; i--) { if (ordinalDate.Day > days[i]) { month = i + 1; day = ordinalDate.Day - days[i]; break; } } if (precision == CalendarDatePrecision.Month) { return new CalendarDate(ordinalDate.Year, month); } return new CalendarDate(ordinalDate.Year, month, day); }
internal static WeekDate ToWeekDate(OrdinalDate ordinalDate, WeekDatePrecision precision) { return ordinalDate.ToCalendarDate(CalendarDatePrecision.Day).ToWeekDate(precision); }