예제 #1
0
        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);
        }
예제 #2
0
 internal static WeekDate ToWeekDate(OrdinalDate ordinalDate, WeekDatePrecision precision)
 {
     return ordinalDate.ToCalendarDate(CalendarDatePrecision.Day).ToWeekDate(precision);
 }