コード例 #1
0
        public DvDateTime Subtract(DvDuration duration)
        {
            Iso8601Duration isoDuration = new Iso8601Duration(duration.Value);
            Iso8601DateTime newDateTime = this.isoDateTime.Subtract(isoDuration);

            return(new DvDateTime(newDateTime.ToString()));
        }
コード例 #2
0
        private bool IsMatchPattern(Iso8601DateTime aValue)
        {
            DesignByContract.Check.Require(aValue != null, string.Format(CommonStrings.XMustNotBeNull, "aValue"));
            DesignByContract.Check.Require(this.Pattern != null, string.Format(CommonStrings.XMustNotBeNull, "Pattern"));

            if (!CDateTime.IsMatchValidityKind(this.MonthValidity, aValue.MonthUnknown))
            {
                return(false);
            }
            if (!CDateTime.IsMatchValidityKind(this.DayValidity, aValue.DayUnknown))
            {
                return(false);
            }
            if (!CDateTime.IsMatchValidityKind(this.HourValidity, aValue.HourUnknown))
            {
                return(false);
            }
            if (!CDateTime.IsMatchValidityKind(this.MinuteValidity, aValue.MinuteUnknown))
            {
                return(false);
            }
            if (!CDateTime.IsMatchValidityKind(this.SecondValidity, aValue.SecondUnknown))
            {
                return(false);
            }
            if (!CDateTime.IsMatchValidityKind(this.MillisecondValidity, !aValue.HasFractionalSecond))
            {
                return(false);
            }

            return(true);
        }
コード例 #3
0
        public DvDateTime(string dateTimeString, DvDuration accuracy, string magnitudeStatus, CodePhrase normalStatus,
                          DvInterval <DvDateTime> normalRange, ReferenceRange <DvDateTime>[] otherReferenceRanges)
        {
            this.isoDateTime = new Iso8601DateTime(dateTimeString);

            base.SetBaseData(accuracy, magnitudeStatus, normalStatus, normalRange, otherReferenceRanges);

            CheckInvariants();
        }
コード例 #4
0
        protected override void ReadXmlBase(System.Xml.XmlReader reader)
        {
            base.ReadXmlBase(reader);

            // Get value
            Check.Require(reader.LocalName == "value", "reader.LocalName must be 'value'");
            this.isoDateTime = new Iso8601DateTime(reader.ReadElementString("value", RmXmlSerializer.OpenEhrNamespace));

            reader.MoveToContent();
        }
コード例 #5
0
        public DvDateTime(int year, int month, int day, int hour, int minute,
                          int second, double fractionalSecond, int timeZoneSign, int timeZoneHour,
                          int timeZoneMinute)
        {
            this.isoDateTime
                = new Iso8601DateTime(year, month, day, hour, minute, second,
                                      fractionalSecond, timeZoneSign, timeZoneHour, timeZoneMinute);

            CheckInvariants();
        }
コード例 #6
0
        } // method GetPatternForFormatCharacter

        /// <summary>
        /// Returns DvDateTime instance with the given magnitude
        /// </summary>
        /// <param name="magnitude">magnitude is the numeric value of the date as seconds
        /// since the calendar origin point 1/1/0000</param>
        /// <returns></returns>
        internal static DvTemporal <DvDateTime> GetDateTimeByMagnitude(double magnitude)
        {
            DesignByContract.Check.Require(magnitude >= TimeDefinitions.hoursInDay * TimeDefinitions.minutesInHour
                                           * TimeDefinitions.secondsInMinute);

            double secondsInDay = TimeDefinitions.secondsInMinute * TimeDefinitions.minutesInHour
                                  * TimeDefinitions.hoursInDay;

            //int daysInMagnitude = (int)(Math.Truncate(magnitude / secondsInDay));
            double          daysInMagnitude = magnitude / secondsInDay;
            DvDate          dvDate          = DvDate.GetDateByMagnitude(daysInMagnitude);
            Iso8601DateTime isoDateTime     = new Iso8601DateTime(dvDate.Value);

            //double remainder = magnitude - daysInMagnitude * secondsInDay;
            double remainder = magnitude - isoDateTime.GetDateTimeSeconds();

            if (remainder != 0 && !isoDateTime.DayUnknown && isoDateTime.Day > TimeDefinitions.nominalDaysInMonth)
            {
                remainder += (isoDateTime.Day - TimeDefinitions.nominalDaysInMonth) * TimeDefinitions.hoursInDay * TimeDefinitions.minutesInHour * TimeDefinitions.secondsInMinute;
            }

            if (remainder < 0)
            {
                dvDate      = DvDate.GetDateByMagnitude((isoDateTime.GetDateTimeSeconds() - secondsInDay) / secondsInDay);
                isoDateTime = new Iso8601DateTime(dvDate.Value);
                remainder   = magnitude - isoDateTime.GetDateTimeSeconds();
            }

            if (remainder == 86400)
            {
                dvDate      = DvDate.GetDateByMagnitude((isoDateTime.GetDateTimeSeconds() + remainder) / secondsInDay);
                isoDateTime = new Iso8601DateTime(dvDate.Value);

                remainder = magnitude - isoDateTime.GetDateTimeSeconds();
            }

            DvTime dvTime = null;

            if (remainder > 0)
            {
                dvTime = DvTime.GetTimeByMagnitude(remainder);

                return(new DvDateTime(dvDate.Value + "T" + dvTime.Value));
            }
            return(new DvDateTime(dvDate.Value));
        }
コード例 #7
0
        private DvDate GetDvDate(DvDateTime dateTime)
        {
            Iso8601DateTime isoDT = new Iso8601DateTime(dateTime.Value);
            DvDate          date  = null;

            int year  = isoDT.Year;
            int month = 0;

            if (!isoDT.MonthUnknown)
            {
                month = isoDT.Month;
            }
            int day = 0;

            if (!isoDT.DayUnknown)
            {
                day = isoDT.Day;
            }

            date = new DvDate(year, month, day);
            return(date);
        }
コード例 #8
0
        private double GetTotalSeconds(DvDateTime dateTime)
        {
            Iso8601DateTime isoDT = new Iso8601DateTime(dateTime.Value);

            double totalTimeSeconds = 0;

            if (isoDT.HasFractionalSecond)
            {
                totalTimeSeconds = isoDT.Hour * TimeDefinitions.minutesInHour * TimeDefinitions.secondsInMinute +
                                   isoDT.Minute * TimeDefinitions.secondsInMinute + isoDT.Second + isoDT.FractionalSecond;
            }
            else
            {
                if (!isoDT.SecondUnknown)
                {
                    totalTimeSeconds = isoDT.Hour * TimeDefinitions.minutesInHour * TimeDefinitions.secondsInMinute +
                                       isoDT.Minute * TimeDefinitions.secondsInMinute + isoDT.Second;
                }
                else
                {
                    if (!isoDT.MinuteUnknown)
                    {
                        totalTimeSeconds = isoDT.Hour * TimeDefinitions.minutesInHour * TimeDefinitions.secondsInMinute +
                                           isoDT.Minute * TimeDefinitions.secondsInMinute;
                    }
                    else
                    {
                        if (!isoDT.HourUnknown)
                        {
                            totalTimeSeconds = isoDT.Hour * TimeDefinitions.minutesInHour * TimeDefinitions.secondsInMinute;
                        }
                    }
                }
            }
            return(totalTimeSeconds);
        }
コード例 #9
0
        internal override string ValidValue(object aValue)
        {
            DesignByContract.Check.Require(aValue != null, string.Format(CommonStrings.XMustNotBeNull, "aValue"));

            string dateTimeString = aValue.ToString();

            if (!Iso8601DateTime.ValidIso8601DateTime(dateTimeString))
            {
                return(string.Format(AmValidationStrings.InvalidIsoDateTimeX, dateTimeString));
            }

            Iso8601DateTime isoDateTime = new Iso8601DateTime(dateTimeString);

            if (isoDateTime == null)
            {
                throw new ApplicationException(string.Format(CommonStrings.XIsNull, "isoDateTime"));
            }

            if (this.Pattern != null)
            {
                if (!IsMatchPattern(isoDateTime))
                {
                    return(string.Format(AmValidationStrings.DateTimeXDoesNotMatchPatternY, dateTimeString, Pattern));
                }
            }

            if (this.Range != null)
            {
                if (!this.Range.Has(isoDateTime))
                {
                    return(string.Format(AmValidationStrings.DateTimeXOutOfRange, dateTimeString));
                }
            }

            return(string.Empty);
        }
コード例 #10
0
        public DvDateTime(System.DateTime dateTime)
        {
            this.isoDateTime = new Iso8601DateTime(dateTime);

            CheckInvariants();
        }
コード例 #11
0
        public override DvDuration Diff(DvTemporal <DvDateTime> b)
        {
            DesignByContract.Check.Require(b is DvDateTime, "Expected a DvDateTime instance in Diff function.");

            DvDateTime bObj = b as DvDateTime;

            if (bObj == this)
            {
                return(new DvDuration("PT0S"));
            }

            double fractionalSecondsDiff = 0;
            int    secondsDiff           = 0;
            int    hoursDiff             = 0;
            int    minutesDiff           = 0;
            int    daysDiff   = 0;
            int    weeksDiff  = 0;
            int    monthsDiff = 0;
            int    yearsDiff  = 0;

            Iso8601DateTime leftOperand  = new Iso8601DateTime(this.Value);
            Iso8601DateTime rightOperand = new Iso8601DateTime(bObj.Value);

            if (leftOperand < rightOperand)
            {
                leftOperand  = new Iso8601DateTime(bObj.Value);;
                rightOperand = new Iso8601DateTime(this.Value);
            }

            if (leftOperand.HasFractionalSecond && rightOperand.HasFractionalSecond)
            {
                fractionalSecondsDiff = leftOperand.FractionalSecond - rightOperand.FractionalSecond;
            }

            if (!leftOperand.SecondUnknown && !rightOperand.SecondUnknown)
            {
                secondsDiff = leftOperand.Second - rightOperand.Second;
            }

            if (!leftOperand.MinuteUnknown && !rightOperand.MinuteUnknown)
            {
                minutesDiff = leftOperand.Minute - rightOperand.Minute;
            }

            if (!leftOperand.HourUnknown && !rightOperand.HourUnknown)
            {
                hoursDiff = leftOperand.Hour - rightOperand.Hour;
            }

            if (!leftOperand.DayUnknown && !rightOperand.DayUnknown)
            {
                daysDiff = leftOperand.Day - rightOperand.Day;
            }

            int daysInMonth = 0;

            if (!leftOperand.MonthUnknown && !rightOperand.MonthUnknown)
            {
                monthsDiff = leftOperand.Month - rightOperand.Month;
                if (leftOperand.Month > 1)
                {
                    daysInMonth = System.DateTime.DaysInMonth(leftOperand.Year, leftOperand.Month - 1);
                }
                else
                {
                    daysInMonth = System.DateTime.DaysInMonth(leftOperand.Year - 1, leftOperand.Month - 1 + Iso8601DateTime.monthsInYear);
                }
            }

            yearsDiff = leftOperand.Year - rightOperand.Year;

            Iso8601Duration diff = Date.NormaliseDuration(yearsDiff, monthsDiff, weeksDiff, daysDiff, hoursDiff, minutesDiff, secondsDiff, fractionalSecondsDiff, daysInMonth);

            return(new DvDuration(diff.ToString()));
        }