/// <summary> /// Static constructor initializing the defined databased to hardcoded values. /// </summary> static TimeResolution() { Millisecond = new TimeResolution(TimeResolutionType.Milliseconds, 1); Second = new TimeResolution(TimeResolutionType.Seconds, 1); Minute = new TimeResolution(TimeResolutionType.Minute, 1); Minute5th = new TimeResolution(TimeResolutionType.Minute, 5); Minute6th = new TimeResolution(TimeResolutionType.Minute, 6); Minute10th = new TimeResolution(TimeResolutionType.Minute, 10); Minute12th = new TimeResolution(TimeResolutionType.Minute, 12); Minute15th = new TimeResolution(TimeResolutionType.Minute, 15); Minute20th = new TimeResolution(TimeResolutionType.Minute, 20); Minute30th = new TimeResolution(TimeResolutionType.Minute, 30); Hour = new TimeResolution(TimeResolutionType.Hour, 1); Day = new TimeResolution(TimeResolutionType.Day, 1); Week = new TimeResolution(TimeResolutionType.Day, 7); Month = new TimeResolution(TimeResolutionType.Day, 30); // Inaccurate Quarter = new TimeResolution(TimeResolutionType.Day, 91); // More Inaccurate Season = new TimeResolution(TimeResolutionType.Day, 182); // More Inaccurate Year = new TimeResolution(TimeResolutionType.Day, 365); // Inaccurate }
public static bool IsValid(UtcDateTime time, TimeResolution res, TimeSpan resolutionSpan) { var span = time.UtcTime.TimeOfDay; var span2 = resolutionSpan; if (Millisecond.ToTimeSpan() == resolutionSpan) return true; if (Second.ToTimeSpan() == resolutionSpan) return EqualMilliseconds(span, span2); if (Minute.ToTimeSpan() == resolutionSpan) return EqualSeconds(span, span2) && EqualMilliseconds(span, span2); if (Minute5th.ToTimeSpan() == resolutionSpan) return EqualMinutes(span, span2, Minute5th.IntervalStepInResolution) && EqualSeconds(span, span2) && EqualMilliseconds(span, span2); if (Minute6th.ToTimeSpan() == resolutionSpan) return EqualMinutes(span, span2, Minute6th.IntervalStepInResolution) && EqualSeconds(span, span2) && EqualMilliseconds(span, span2); if (Minute10th.ToTimeSpan() == resolutionSpan) return EqualMinutes(span, span2, Minute10th.IntervalStepInResolution) && EqualSeconds(span, span2) && EqualMilliseconds(span, span2); if (Minute12th.ToTimeSpan() == resolutionSpan) return EqualMinutes(span, span2, Minute12th.IntervalStepInResolution) && EqualSeconds(span, span2) && EqualMilliseconds(span, span2); if (Minute15th.ToTimeSpan() == resolutionSpan) return EqualMinutes(span, span2, Minute15th.IntervalStepInResolution) && EqualSeconds(span, span2) && EqualMilliseconds(span, span2); if (Minute20th.ToTimeSpan() == resolutionSpan) return EqualMinutes(span, span2, Minute20th.IntervalStepInResolution) && EqualSeconds(span, span2) && EqualMilliseconds(span, span2); if (Minute30th.ToTimeSpan() == resolutionSpan) return EqualMinutes(span, span2, Minute30th.IntervalStepInResolution) && EqualSeconds(span, span2) && EqualMilliseconds(span, span2); if (Hour.ToTimeSpan() == resolutionSpan) return EqualMinutes(span, span2, 0) && EqualSeconds(span, span2) && EqualMilliseconds(span, span2); // Cannot implement the rest without time zone data and probably a base time point. throw new Exception("Unable to verify TimeResolution.Type and cannot infer provided time's resolution. Type: " + res.Type); }