public static DateTimeIndex GetDateTimeIndex(Timing Timing) { var DateTimeIndex = new DateTimeIndex(); if (Timing.Event != null) { DateTimeIndex.Low = ResolveTargetEventDateTime(Timing, true); if (DateTimeIndex.Low != DateTimeOffset.MaxValue.ToUniversalTime()) { decimal TargetDuration = ResolveTargetDurationValue(Timing); Timing.UnitsOfTime?TargetUnitsOfTime = null; if (TargetDuration > decimal.Zero) { if (Timing.Repeat.DurationUnit.HasValue) { TargetUnitsOfTime = Timing.Repeat.DurationUnit.Value; } } if (TargetDuration > decimal.Zero && TargetUnitsOfTime.HasValue) { DateTimeIndex.High = AddDurationTimeToEvent(ResolveTargetEventDateTime(Timing, false), TargetDuration, TargetUnitsOfTime); } else { DateTimeIndex.High = null; } } else { DateTimeIndex.Low = null; } } return(DateTimeIndex); }
public static DateTimeIndex GetDateTimeIndex(Period value) { DateTimeIndex DateTimeIndexStart = null; DateTimeIndex DateTimeIndexEnd = null; var DateTimeIndex = new DateTimeIndex(); PartialDateTime?PartialDateTimeLow = null; if (value.StartElement != null) { PartialDateTimeLow = value.StartElement.ToPartialDateTime(); DateTimeIndexStart = ParsePartialDateTime(PartialDateTimeLow); } PartialDateTime?PartialDateTimeHigh = null; if (value.EndElement != null) { PartialDateTimeHigh = value.EndElement.ToPartialDateTime(); DateTimeIndexEnd = ParsePartialDateTime(PartialDateTimeHigh); } if (DateTimeIndexStart != null) { DateTimeIndex.Low = DateTimeIndexStart.Low; } if (DateTimeIndexEnd != null) { DateTimeIndex.High = DateTimeIndexEnd.High; } return(DateTimeIndex); }
public static DateTimeIndex GetDateTimeIndex(Period value) { var DateTimeIndex = new DateTimeIndex(); PartialDateTime?PartialDateTimeLow = null; if (value.StartElement != null) { PartialDateTimeLow = value.StartElement.ToPartialDateTime(); } PartialDateTime?PartialDateTimeHigh = null; if (value.EndElement != null) { PartialDateTimeHigh = value.EndElement.ToPartialDateTime(); } if (PartialDateTimeLow.HasValue) { DateTimeIndex.Low = PartialDateTimeLow.Value.ToUniversalTime().ToLocalTime(); } if (PartialDateTimeHigh.HasValue) { DateTimeIndex.High = PartialDateTimeHigh.Value.ToUniversalTime().ToLocalTime(); } return(DateTimeIndex); }
//Check all DateTime values in the list and find the earliest value. private static DateTimeOffset ResolveTargetEventDateTime(Timing Timing, bool TargetLowest) { DateTimeOffset TargetEventDateTime; if (TargetLowest) { TargetEventDateTime = DateTimeOffset.MaxValue.ToUniversalTime(); } else { TargetEventDateTime = DateTimeOffset.MinValue.ToUniversalTime(); } foreach (var EventDateTime in Timing.EventElement) { if (!string.IsNullOrWhiteSpace(EventDateTime.Value)) { if (FhirDateTime.IsValidValue(EventDateTime.Value)) { PartialDateTime?PartialDateTimeType = EventDateTime.ToPartialDateTime(); if (PartialDateTimeType.HasValue) { DateTimeIndex DateTimeIndexOffSetValue = ParsePartialDateTime(PartialDateTimeType.Value); DateTimeOffset DateTimeOffSetValue = PartialDateTimeType.Value.ToUniversalTime().ToLocalTime(); if (TargetLowest) { if (TargetEventDateTime > DateTimeIndexOffSetValue.Low.Value) { TargetEventDateTime = DateTimeIndexOffSetValue.Low.Value; } } else { if (TargetEventDateTime < DateTimeIndexOffSetValue.High.Value) { TargetEventDateTime = DateTimeIndexOffSetValue.High.Value; } } } } } } return(TargetEventDateTime); }