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);
        }
Beispiel #3
0
        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);
        }