Beispiel #1
0
        internal override string ValidValue(object aValue)
        {
            DesignByContract.Check.Require(aValue != null, string.Format(CommonStrings.XMustNotBeNull, "aValue"));

            string timeString = aValue.ToString();

            if (!Iso8601Time.ValidIso8601Time(timeString))
            {
                return(string.Format(AmValidationStrings.InvalidIsoTime, timeString));
            }

            Iso8601Time isoTime = new Iso8601Time(timeString);

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

            if (this.Pattern != null)
            {
                if (!IsMatchPattern(isoTime))
                {
                    return(string.Format(AmValidationStrings.TimeXDoesNotMatchPatternY, isoTime, Pattern));
                }
            }
            if (this.Range != null)
            {
                if (!this.Range.Has(isoTime))
                {
                    return(string.Format(AmValidationStrings.TimeXOutOfRange, isoTime));
                }
            }

            return(string.Empty);
        }
Beispiel #2
0
        public override DvAbsoluteQuantity <DvTime, DvDuration> Subtract(DvAmount <DvDuration> b)
        {
            DesignByContract.Check.Require(b is DvDuration, "b object must be a DvDuration instance");

            DvDuration duration = b as DvDuration;

            Iso8601Duration isoDuration = new Iso8601Duration(duration.Value);
            Iso8601Time     newIsoTime  = this.isoTime.Subtract(isoDuration);

            return(new DvTime(newIsoTime.ToString()));
        }
Beispiel #3
0
        public override DvDuration Diff(DvTemporal <DvTime> b)
        {
            DesignByContract.Check.Require(b is DvTime, "Expected a DvTime instance in Diff function.");

            DvTime bObj = b as DvTime;

            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;

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

            if (leftOperand < rightOperand)
            {
                leftOperand  = new Iso8601Time(bObj.Value);;
                rightOperand = new Iso8601Time(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;
            }

            hoursDiff = leftOperand.Hour - rightOperand.Hour;

            int daysInMonth = 0;

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

            DesignByContract.Check.Assert(diff.Years == 0 && diff.Months == 0 && diff.Days == 0);

            return(new DvDuration(diff.ToString()));
        }
Beispiel #4
0
        public DvTime(string timeString, DvDuration accuracy, string magnitudeStatus, CodePhrase normalStatus,
                      DvInterval <DvTime> normalRange, ReferenceRange <DvTime>[] otherReferenceRanges)
            : this()
        {
            Check.Require(Iso8601Time.ValidIso8601Time(timeString), "Time string(" + timeString + ") must be a valid ISO 8601 time.");

            this.isoTime = new Iso8601Time(timeString);

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

            CheckInvariants();
        }
Beispiel #5
0
        private bool IsMatchPattern(Iso8601Time isoTime)
        {
            DesignByContract.Check.Require(isoTime != null, string.Format(CommonStrings.XMustNotBeNull, "isoTime"));
            DesignByContract.Check.Require(this.Pattern != null, string.Format(CommonStrings.XMustNotBeNull, "Pattern"));

            if (!CDateTime.IsMatchValidityKind(this.MinuteValidity, isoTime.MinuteUnknown))
            {
                return(false);
            }

            if (!CDateTime.IsMatchValidityKind(this.SecondValidity, isoTime.SecondUnknown))
            {
                return(false);
            }

            return(true);
        }
Beispiel #6
0
 private DvTime AppendTimeZone(DvTime time)
 {
     if (this.isoDateTime.Iso8601TimeZone != null && Math.Abs(this.isoDateTime.Iso8601TimeZone.GetTimeZoneSeconds()) > 0)
     {
         Iso8601Time isoTime = new Iso8601Time(time.Value);
         if (isoTime.HasFractionalSecond)
         {
             time = new DvTime(isoTime.Hour, isoTime.Minute, isoTime.Second, isoTime.FractionalSecond,
                               this.isoDateTime.Iso8601TimeZone.Sign, this.isoDateTime.Iso8601TimeZone.Hour,
                               this.isoDateTime.Iso8601TimeZone.Minute);
         }
         else
         {
             if (!isoTime.SecondUnknown)
             {
                 time = new DvTime(isoTime.Hour, isoTime.Minute, isoTime.Second, 0,
                                   this.isoDateTime.Iso8601TimeZone.Sign, this.isoDateTime.Iso8601TimeZone.Hour,
                                   this.isoDateTime.Iso8601TimeZone.Minute);
             }
             else
             {
                 if (!isoTime.MinuteUnknown)
                 {
                     time = new DvTime(isoTime.Hour, isoTime.Minute, -1, 0,
                                       this.isoDateTime.Iso8601TimeZone.Sign, this.isoDateTime.Iso8601TimeZone.Hour,
                                       this.isoDateTime.Iso8601TimeZone.Minute);
                 }
                 else
                 {
                     throw new ApplicationException("should not get here.");
                 }
             }
         }
     }
     return(time);
 }