internal static ExtendedDateTime ToRoundedPrecision(ExtendedDateTime e, ExtendedDateTimePrecision p, bool roundUp = false)
        {
            var year   = e.Year;
            var month  = e.Month;
            var day    = e.Day;
            var hour   = e.Hour;
            var minute = e.Minute;
            var second = e.Second;

            if (p < ExtendedDateTimePrecision.Second)
            {
                second = 0;
            }

            if (p < ExtendedDateTimePrecision.Minute)
            {
                minute = 0;
            }

            if (p < ExtendedDateTimePrecision.Hour)
            {
                hour = 0;
            }

            if (p < ExtendedDateTimePrecision.Day)
            {
                day = 1;
            }

            if (p < ExtendedDateTimePrecision.Month)
            {
                month = 1;
            }

            if (roundUp)
            {
                switch (p)
                {
                case ExtendedDateTimePrecision.Year:

                    if (e.Month > 1)
                    {
                        year++;
                    }

                    break;

                case ExtendedDateTimePrecision.Month:

                    if (e.Day > 1)
                    {
                        month++;
                    }

                    break;

                case ExtendedDateTimePrecision.Day:

                    if (e.Hour > 0)
                    {
                        day++;
                    }

                    break;

                case ExtendedDateTimePrecision.Hour:

                    if (e.Minute > 0)
                    {
                        hour++;
                    }

                    break;

                case ExtendedDateTimePrecision.Minute:

                    if (e.Second > 0)
                    {
                        minute++;
                    }

                    break;

                case ExtendedDateTimePrecision.Second:

                    break;
                }

                if (second > 59)
                {
                    second = 0;
                    minute++;
                }

                if (minute > 59)
                {
                    minute = 0;
                    hour++;
                }

                if (hour > 23)
                {
                    hour = 0;
                    day++;
                }

                if (day > DaysInMonth(year, month == 13 ? 1 : month))
                {
                    day = 1;
                    month++;
                }

                if (month > 12)
                {
                    month = 1;
                    year++;
                }
            }

            var extendedDateTime = new ExtendedDateTime(year, month, day, hour, minute, second, e.UtcOffset.Hours, e.UtcOffset.Minutes);

            extendedDateTime.YearFlags  = e.YearFlags;
            extendedDateTime.MonthFlags = e.MonthFlags;
            extendedDateTime.DayFlags   = e.DayFlags;
            extendedDateTime.Precision  = p;

            return(extendedDateTime);
        }
示例#2
0
 public ExtendedDateTime ToRoundedPrecision(ExtendedDateTimePrecision p, bool roundUp = false)
 {
     return(ExtendedDateTimeCalculator.ToRoundedPrecision(this, p, roundUp));
 }