Esempio n. 1
0
        private static DateTimeIndex ParsePartialDateTimeOLD(PartialDateTime?PartialDateTimeType)
        {
            //2012-12-01T12:00:00+01:00
            //DateTimeOffset Low = PartialDateTimeType.Value.ToUniversalTime().ToLocalTime();
            //Get the localTime offset (+8:00 is Perth Australia, will always be relevent to the server location, Sydney +10:00 for PyroHealth.net)
            // var LocalTimeOffSet = DateTimeOffset.Now.Offset;
            //Convert to DateTimeOffset, which is done by caling ToUniversalTime(), yet this converts to UniversalTime
            // So we then set the timezone to the local timezone, which converts the time value to plus that timezone
            // So then subtract that timezone hours from the final result
            //Now we have the original timezone and correct time.
            //DateTimeOffset Low = PartialDateTimeType.Value.ToUniversalTime().ToOffset(LocalTimeOffSet).Subtract(LocalTimeOffSet);

            DateTimeOffset?Low = FhirDateTimeSupport.ConvertToDateTimeOffSetLow(PartialDateTimeType.Value.ToString());

            DateTimeOffset High = DateTimeOffset.MaxValue;

            if (Low.HasValue)
            {
                int DateCharCount = PartialDateTimeType.Value.ToString().Count();
                if (DateCharCount == 4)
                {
                    High = Low.Value.AddYears(1).AddMilliseconds(-1);
                }
                else if (DateCharCount == 7)
                {
                    High = Low.Value.AddMonths(1).AddMilliseconds(-1);
                }
                else if (DateCharCount == 10)
                {
                    High = Low.Value.AddDays(1).AddMilliseconds(-1);
                }
                else if (DateCharCount == 25)
                {
                    High = Low.Value.AddSeconds(1).AddMilliseconds(-1);
                }
                else if (DateCharCount == 27 || DateCharCount == 28 || DateCharCount == 29)
                {
                    High = Low.Value.AddMilliseconds(1);
                }
                else if (DateCharCount > 29)
                {
                    High = Low.Value.AddTicks(1);
                }
                return(new DateTimeIndex(Low.Value, High));
            }
            return(null);
        }
        private static DateTimeIndex ParsePartialDateTime(PartialDateTime?PartialDateTimeType)
        {
            FhirDateTimeSupport FhirDateTimeSupport = new FhirDateTimeSupport(PartialDateTimeType.Value.ToString());

            if (FhirDateTimeSupport.IsValid)
            {
                DateTimeOffset?Low  = FhirDateTimeSupport.Value;
                DateTimeOffset High = DateTimeOffset.MaxValue;

                switch (FhirDateTimeSupport.Precision)
                {
                case FhirDateTimeSupport.DateTimePrecision.Year:
                    High = Low.Value.AddYears(1).AddMilliseconds(-1);
                    break;

                case FhirDateTimeSupport.DateTimePrecision.Month:
                    High = Low.Value.AddMonths(1).AddMilliseconds(-1);
                    break;

                case FhirDateTimeSupport.DateTimePrecision.Day:
                    High = Low.Value.AddDays(1).AddMilliseconds(-1);
                    break;

                case FhirDateTimeSupport.DateTimePrecision.HourMin:
                    High = Low.Value.AddSeconds(1).AddMilliseconds(-1);
                    break;

                case FhirDateTimeSupport.DateTimePrecision.Sec:
                    High = Low.Value.AddMilliseconds(999);
                    break;

                case FhirDateTimeSupport.DateTimePrecision.MilliSec:
                    High = Low.Value.AddMilliseconds(1).AddTicks(-1);
                    break;

                case FhirDateTimeSupport.DateTimePrecision.Tick:
                    High = Low.Value.AddTicks(1);
                    break;

                default:
                    break;
                }
                return(new DateTimeIndex(Low.Value, High));
            }
            return(null);
        }