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); }
public ExtendedDateTime ToRoundedPrecision(ExtendedDateTimePrecision p, bool roundUp = false) { return(ExtendedDateTimeCalculator.ToRoundedPrecision(this, p, roundUp)); }