Example #1
0
        internal Iso8601Time Add(Iso8601Duration duration)
        {
            DesignByContract.Check.Require(duration != null, "duration must not be null.");

            Iso8601Time newTime = new Iso8601Time(this.ToString());

            Iso8601Duration normalisedDuration = Iso8601Duration.Normalise(duration);

            if (normalisedDuration.FractionalSecond > 0)
            {
                if (newTime.SecondUnknown)
                {
                    throw new NotSupportedException("Cannot add a duration with fractionalSeconds when the datetime seconds unknow.");
                }

                if (newTime.HasFractionalSecond)
                {
                    newTime.fractionalSecond += normalisedDuration.FractionalSecond;
                    NormaliseFractionalSecond(newTime);
                }
                else
                {
                    newTime.fractionalSecond = normalisedDuration.FractionalSecond;
                }
            }

            if (normalisedDuration.Seconds > 0)
            {
                if (newTime.SecondUnknown)
                {
                    throw new NotSupportedException("Cannot add a duration with seconds when the time seconds unknow.");
                }
                newTime.second += normalisedDuration.Seconds;
                NormaliseSecond(newTime);
            }

            if (normalisedDuration.Minutes > 0)
            {
                if (newTime.MinuteUnknown)
                {
                    throw new NotSupportedException("Cannot add a duration with minutes when the time minutes unknow.");
                }
                newTime.minute += normalisedDuration.Minutes;
                NormaliseMinute(newTime);
            }


            if (normalisedDuration.Hours > 0)
            {
                newTime.hour += normalisedDuration.Hours;

                if (newTime.hour >= 24)
                {
                    throw new ApplicationException("Invalid durtion results in the hours value greater or equal to 24.");
                }
            }

            return(newTime);
        }
Example #2
0
        private static void NormaliseSubtractedMinute(Iso8601Time isoTime)
        {
            Time time = new Time(isoTime.hour, isoTime.minute);

            time.NormaliseSubtractedMinutes();

            isoTime.hour   = time.Hour;
            isoTime.minute = time.Minute;
        }
Example #3
0
        private static void NormaliseSubtractedSecond(Iso8601Time isoTime)
        {
            Time time = new Time(isoTime.hour, isoTime.minute, isoTime.second);

            time.NormaliseSubtractedSecond();

            isoTime.hour   = time.Hour;
            isoTime.minute = time.Minute;
            isoTime.second = time.Second;
        }
Example #4
0
        private static void NormaliseMinute(Iso8601Time isoTime)
        {
            DesignByContract.Check.Require(!isoTime.MinuteUnknown, "isoTime.MinuteUnknow must be false.");

            Time time = new Time(isoTime.hour, isoTime.minute);

            time.NormaliseMinute();

            isoTime.hour   = time.Hour;
            isoTime.minute = time.Minute;
        }
Example #5
0
        private static void NormaliseFractionalSecond(Iso8601Time isoTime)
        {
            DesignByContract.Check.Require(!isoTime.MinuteUnknown, "isoTime.MinuteUnknow must be false.");
            DesignByContract.Check.Require(!isoTime.SecondUnknown, "isoTime.SecondUnknown must be false.");
            DesignByContract.Check.Require(isoTime.HasFractionalSecond, "isoTime.HasFractionalSecond must be true.");

            Time time = new Time(isoTime.hour, isoTime.minute, isoTime.second, isoTime.fractionalSecond);

            time.NormaliseFractionalSecond();

            isoTime.hour             = time.Hour;
            isoTime.minute           = time.Minute;
            isoTime.second           = time.Second;
            isoTime.fractionalSecond = time.FractionalSeconds;
        }
Example #6
0
        /// <summary>
        /// Compare the current time instance with the obj. Returns 0 if they are equal,
        /// -1 if the current instance less than obj, 1 if the current instance greater than obj.
        /// </summary>
        /// <param name="obj"></param>
        /// <returns></returns>
        public int CompareTo(object obj)
        {
            // precondition is that the current instance must be the same type as obj
            Check.Require(this.GetType() == obj.GetType(),
                          "The current instance (" + this.GetType().ToString() + ") must be the same type as the obj("
                          + obj.GetType().ToString() + ")");

            Iso8601Time objTime = obj as Iso8601Time;

            if (this.GetTimeSeconds() > objTime.GetTimeSeconds())
            {
                return(1);
            }
            else if (this.GetTimeSeconds() < objTime.GetTimeSeconds())
            {
                return(-1);
            }
            else
            {
                return(0);
            }
        }
Example #7
0
        internal Iso8601Time Subtract(Iso8601Duration duration)
        {
            DesignByContract.Check.Require(duration != null, "duration must not be null.");

            Iso8601Time newTime = new Iso8601Time(this.ToString());

            Iso8601Duration normalisedDuration = Iso8601Duration.Normalise(duration);

            if (normalisedDuration.FractionalSecond > 0)
            {
                if (newTime.SecondUnknown)
                {
                    throw new NotSupportedException("Cannot subtract a duration with fractionalSeconds when the time seconds unknow.");
                }

                if (newTime.HasFractionalSecond)
                {
                    newTime.fractionalSecond -= normalisedDuration.FractionalSecond;
                }
                else
                {
                    newTime.fractionalSecond = (normalisedDuration.FractionalSecond) * -1;
                }

                NormaliseSubtractedFractionalSecond(newTime);
            }

            if (normalisedDuration.Seconds > 0)
            {
                if (newTime.SecondUnknown)
                {
                    throw new NotSupportedException("Cannot subtract a duration with seconds when the time seconds unknow.");
                }

                newTime.second -= normalisedDuration.Seconds;
                NormaliseSubtractedSecond(newTime);
            }

            if (normalisedDuration.Minutes > 0)
            {
                if (newTime.MinuteUnknown)
                {
                    throw new NotSupportedException("Cannot subtract a duration with minutes when the time minutes unknow.");
                }
                newTime.minute -= normalisedDuration.Minutes;
                NormaliseSubtractedMinute(newTime);
            }


            if (normalisedDuration.Hours > 0)
            {
                newTime.hour -= normalisedDuration.Hours;

                if (newTime.hour < 0)
                {
                    throw new ApplicationException("Invalid duration results the Iso8601Time hour less than 0 after subtraction.");
                }
            }

            return(newTime);
        }
Example #8
0
        private static void NormaliseSubtractedMinute(Iso8601Time isoTime)
        {
            Time time = new Time(isoTime.hour, isoTime.minute);
            time.NormaliseSubtractedMinutes();

            isoTime.hour = time.Hour;
            isoTime.minute = time.Minute;
        }
Example #9
0
        private static void NormaliseSubtractedSecond(Iso8601Time isoTime)
        {
            Time time = new Time(isoTime.hour, isoTime.minute, isoTime.second);
            time.NormaliseSubtractedSecond();

            isoTime.hour = time.Hour;
            isoTime.minute = time.Minute;
            isoTime.second = time.Second;
        }
Example #10
0
        private static void NormaliseSecond(Iso8601Time isoTime)
        {
            DesignByContract.Check.Require(!isoTime.MinuteUnknown, "isoTime.MinuteUnknow must be false.");
            DesignByContract.Check.Require(!isoTime.SecondUnknown, "isoTime.SecondUnknown must be false.");

            Time time = new Time(isoTime.hour, isoTime.minute, isoTime.second);
            time.NormaliseSecond();

            isoTime.hour = time.Hour;
            isoTime.minute = time.Minute;
            isoTime.second = time.Second;
        }
Example #11
0
        internal Iso8601Time Subtract(Iso8601Duration duration)
        {
            DesignByContract.Check.Require(duration != null, "duration must not be null.");

            Iso8601Time newTime = new Iso8601Time(this.ToString());

            Iso8601Duration normalisedDuration = Iso8601Duration.Normalise(duration);

            if (normalisedDuration.FractionalSecond > 0)
            {
                if (newTime.SecondUnknown)
                    throw new NotSupportedException("Cannot subtract a duration with fractionalSeconds when the time seconds unknow.");

                if (newTime.HasFractionalSecond)
                    newTime.fractionalSecond -= normalisedDuration.FractionalSecond;
                else
                    newTime.fractionalSecond = (normalisedDuration.FractionalSecond)*-1;

                NormaliseSubtractedFractionalSecond(newTime);
            }

            if (normalisedDuration.Seconds > 0)
            {
                if (newTime.SecondUnknown)
                    throw new NotSupportedException("Cannot subtract a duration with seconds when the time seconds unknow.");

                newTime.second -= normalisedDuration.Seconds;
                NormaliseSubtractedSecond(newTime);
            }

            if (normalisedDuration.Minutes > 0)
            {
                if (newTime.MinuteUnknown)
                    throw new NotSupportedException("Cannot subtract a duration with minutes when the time minutes unknow.");
                newTime.minute -= normalisedDuration.Minutes;
                NormaliseSubtractedMinute(newTime);
            }

            if (normalisedDuration.Hours > 0)
            {
                newTime.hour -= normalisedDuration.Hours;

                if (newTime.hour < 0)
                    throw new ApplicationException("Invalid duration results the Iso8601Time hour less than 0 after subtraction.");
            }

            return newTime;
        }
Example #12
0
        internal Iso8601Time Add(Iso8601Duration duration)
        {
            DesignByContract.Check.Require(duration != null, "duration must not be null.");

            Iso8601Time newTime = new Iso8601Time(this.ToString());

            Iso8601Duration normalisedDuration = Iso8601Duration.Normalise(duration);

            if (normalisedDuration.FractionalSecond > 0)
            {
                if (newTime.SecondUnknown)
                    throw new NotSupportedException("Cannot add a duration with fractionalSeconds when the datetime seconds unknow.");

                if (newTime.HasFractionalSecond)
                {
                    newTime.fractionalSecond += normalisedDuration.FractionalSecond;
                    NormaliseFractionalSecond(newTime);
                }
                else
                    newTime.fractionalSecond = normalisedDuration.FractionalSecond;
            }

            if (normalisedDuration.Seconds > 0)
            {
                if (newTime.SecondUnknown)
                    throw new NotSupportedException("Cannot add a duration with seconds when the time seconds unknow.");
                newTime.second += normalisedDuration.Seconds;
                NormaliseSecond(newTime);
            }

            if (normalisedDuration.Minutes > 0)
            {
                if (newTime.MinuteUnknown)
                    throw new NotSupportedException("Cannot add a duration with minutes when the time minutes unknow.");
                newTime.minute += normalisedDuration.Minutes;
                NormaliseMinute(newTime);
            }

            if (normalisedDuration.Hours > 0)
            {
                newTime.hour += normalisedDuration.Hours;

                if (newTime.hour >= 24)
                    throw new ApplicationException("Invalid durtion results in the hours value greater or equal to 24.");
            }

            return newTime;
        }
Example #13
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;
        }
Example #14
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;
        }