コード例 #1
0
        private IEnumerable <TemporalComponent> GetComponentsFromText(string text)
        {
            var components = new List <TemporalComponent>();

            var dateComponents = DateComponent.GetComponentsFromText(text);

            components.AddRange(dateComponents);

            var timeComponents = TimeComponent.GetComponentsFromText(text);

            components.AddRange(timeComponents);

            var sequenceComponents = SequenceComponent.GetComponentsFromText(text);

            components.AddRange(sequenceComponents);

            var fuzzyComponents = FuzzyComponent.GetComponentsFromText(text);

            components.AddRange(fuzzyComponents);

            var durationComponents = DurationComponent.GetComponentsFromText(text);

            components.AddRange(durationComponents);

            var relativeComponents = RelativeDateTimeComponent.GetComponentsFromText(text);

            components.AddRange(relativeComponents);

            return(components);
        }
コード例 #2
0
 public RulerIntervalInternal(TimeSpan dur, int nonUniformComponentCount, DateComponent comp, bool isHiddenWhenMajor = false)
 {
     Duration  = dur;
     Component = comp;
     NonUniformComponentCount = nonUniformComponentCount;
     IsHiddenWhenMajor        = isHiddenWhenMajor;
 }
コード例 #3
0
 public RulerIntervalInternal(RulerInterval ri)
 {
     Duration  = ri.Duration;
     Component = ri.Component;
     NonUniformComponentCount = ri.NonUniformComponentCount;
     IsHiddenWhenMajor        = ri.IsHiddenWhenMajor;
 }
コード例 #4
0
        private void AssertInvalidDateComponent(string input, DateTime baseDate)
        {
            var components      = DateComponent.GetComponentsFromText(input);
            var componentPeriod = components.Select(c => c.GetTimePeriod(baseDate)).FirstOrDefault();

            Assert.IsNull(componentPeriod);
        }
コード例 #5
0
        public void GetMonthFromNameTest()
        {
            Assert.AreEqual(1, DateComponent.GetMonthFromName("january"));
            Assert.AreEqual(2, DateComponent.GetMonthFromName("february"));
            Assert.AreEqual(3, DateComponent.GetMonthFromName("march"));
            Assert.AreEqual(4, DateComponent.GetMonthFromName("april"));
            Assert.AreEqual(5, DateComponent.GetMonthFromName("may"));
            Assert.AreEqual(6, DateComponent.GetMonthFromName("june"));
            Assert.AreEqual(7, DateComponent.GetMonthFromName("july"));
            Assert.AreEqual(8, DateComponent.GetMonthFromName("august"));
            Assert.AreEqual(9, DateComponent.GetMonthFromName("september"));
            Assert.AreEqual(10, DateComponent.GetMonthFromName("october"));
            Assert.AreEqual(11, DateComponent.GetMonthFromName("november"));
            Assert.AreEqual(12, DateComponent.GetMonthFromName("december"));

            //Abbreviation
            Assert.AreEqual(-1, DateComponent.GetMonthFromName("j"));
            Assert.AreEqual(-1, DateComponent.GetMonthFromName("ju"));
            Assert.AreEqual(6, DateComponent.GetMonthFromName("jun"));

            //Case-sensitivity
            Assert.AreEqual(4, DateComponent.GetMonthFromName("ApRiL"));

            //Invalid
            Assert.AreEqual(-1, DateComponent.GetMonthFromName("invalid"));
            Assert.AreEqual(-1, DateComponent.GetMonthFromName(" march"));
            Assert.AreEqual(-1, DateComponent.GetMonthFromName("may "));
        }
コード例 #6
0
        private void AssertValidDateComponent(ITimePeriod expected, string input, DateTime baseDate)
        {
            var components = DateComponent.GetComponentsFromText(input);

            Assert.IsTrue(components.Any());
            var componentPeriod = components.FirstOrDefault().GetTimePeriod(baseDate);

            Assert.IsNotNull(componentPeriod);
            Assert.AreEqual(expected.Start, componentPeriod.Start);
            Assert.AreEqual(expected.End, componentPeriod.End);
        }
コード例 #7
0
        /// <summary>
        /// Gets a single component of this date.
        /// </summary>
        /// <param name="component"> The date component to extract. </param>
        /// <param name="localOrUniversal"> Indicates whether to retrieve the component in local
        /// or universal time. </param>
        /// <returns> The date component value, or <c>NaN</c> if the date is invalid. </returns>
        private double GetDateComponent(DateComponent component, DateTimeKind localOrUniversal)
        {
            if (this.value == InvalidDate)
            {
                return(double.NaN);
            }

            // Convert the date to local or universal time.
            switch (localOrUniversal)
            {
            case DateTimeKind.Local:
                this.value = this.Value.ToLocalTime();
                break;

            case DateTimeKind.Utc:
                this.value = this.Value.ToUniversalTime();
                break;

            default:
                throw new ArgumentOutOfRangeException("localOrUniversal");
            }

            // Extract the requested component.
            switch (component)
            {
            case DateComponent.Year:
                return(this.value.Year);

            case DateComponent.Month:
                return(this.value.Month - 1);                           // Javascript month is 0-11.

            case DateComponent.Day:
                return(this.value.Day);

            case DateComponent.DayOfWeek:
                return((double)this.value.DayOfWeek);

            case DateComponent.Hour:
                return(this.value.Hour);

            case DateComponent.Minute:
                return(this.value.Minute);

            case DateComponent.Second:
                return(this.value.Second);

            case DateComponent.Millisecond:
                return(this.value.Millisecond);

            default:
                throw new ArgumentOutOfRangeException("component");
            }
        }
コード例 #8
0
        public void GetNextDateFromWeekDayTest()
        {
            Assert.AreEqual(new DateTime(2017, 1, 8), DateComponent.GetNextDateFromWeekDay("sunday", BaseDate));
            Assert.AreEqual(new DateTime(2017, 1, 2), DateComponent.GetNextDateFromWeekDay("monday", BaseDate));
            Assert.AreEqual(new DateTime(2017, 1, 3), DateComponent.GetNextDateFromWeekDay("tuesday", BaseDate));
            Assert.AreEqual(new DateTime(2017, 1, 4), DateComponent.GetNextDateFromWeekDay("wednesday", BaseDate));
            Assert.AreEqual(new DateTime(2017, 1, 5), DateComponent.GetNextDateFromWeekDay("thursday", BaseDate));
            Assert.AreEqual(new DateTime(2017, 1, 6), DateComponent.GetNextDateFromWeekDay("friday", BaseDate));
            Assert.AreEqual(new DateTime(2017, 1, 7), DateComponent.GetNextDateFromWeekDay("saturday", BaseDate));

            Assert.AreEqual(BaseDate, DateComponent.GetNextDateFromWeekDay("invalid", BaseDate));
        }
コード例 #9
0
        /// <summary>
        /// Sets one or more components of this date.
        /// </summary>
        /// <param name="firstComponent"> The first date component to set. </param>
        /// <param name="localOrUniversal"> Indicates whether to set the component(s) in local
        /// or universal time. </param>
        /// <param name="componentValues"> One or more date component values. </param>
        /// <returns> The number of milliseconds elapsed since January 1, 1970, 00:00:00 UTC for
        /// the new date. </returns>
        private double SetDateComponents(DateComponent firstComponent, DateTimeKind localOrUniversal, params double[] componentValues)
        {
            // Convert the date to local or universal time.
            switch (localOrUniversal)
            {
            case DateTimeKind.Local:
                this.value = this.Value.ToLocalTime();
                break;

            case DateTimeKind.Utc:
                this.value = this.Value.ToUniversalTime();
                break;

            default:
                throw new ArgumentOutOfRangeException("localOrUniversal");
            }

            // Get the current component values of the date.
            int[] allComponentValues = new int[7];
            allComponentValues[0] = this.value.Year;
            allComponentValues[1] = this.value.Month - 1;               // Javascript month is 0-11.
            allComponentValues[2] = this.value.Day;
            allComponentValues[3] = this.value.Hour;
            allComponentValues[4] = this.value.Minute;
            allComponentValues[5] = this.value.Second;
            allComponentValues[6] = this.value.Millisecond;

            // Overwrite the component values with the new ones that were passed in.
            for (int i = 0; i < componentValues.Length; i++)
            {
                double componentValue = componentValues[i];
                if (double.IsNaN(componentValue) || double.IsInfinity(componentValue))
                {
                    this.value = InvalidDate;
                    return(this.ValueInMilliseconds);
                }
                allComponentValues[(int)firstComponent + i] = (int)componentValue;
            }

            // Construct a new date.
            this.value = ToDateTime(allComponentValues[0], allComponentValues[1], allComponentValues[2],
                                    allComponentValues[3], allComponentValues[4], allComponentValues[5], allComponentValues[6],
                                    localOrUniversal);

            // Return the date value.
            return(this.ValueInMilliseconds);
        }
コード例 #10
0
        public void GetNextDateFromMonthTest()
        {
            Assert.AreEqual(new DateTime(2018, 1, 1), DateComponent.GetNextDateFromMonth("january", BaseDate));
            Assert.AreEqual(new DateTime(2017, 2, 1), DateComponent.GetNextDateFromMonth("february", BaseDate));
            Assert.AreEqual(new DateTime(2017, 3, 1), DateComponent.GetNextDateFromMonth("march", BaseDate));
            Assert.AreEqual(new DateTime(2017, 4, 1), DateComponent.GetNextDateFromMonth("april", BaseDate));
            Assert.AreEqual(new DateTime(2017, 5, 1), DateComponent.GetNextDateFromMonth("may", BaseDate));
            Assert.AreEqual(new DateTime(2017, 6, 1), DateComponent.GetNextDateFromMonth("june", BaseDate));
            Assert.AreEqual(new DateTime(2017, 7, 1), DateComponent.GetNextDateFromMonth("july", BaseDate));
            Assert.AreEqual(new DateTime(2017, 8, 1), DateComponent.GetNextDateFromMonth("august", BaseDate));
            Assert.AreEqual(new DateTime(2017, 9, 1), DateComponent.GetNextDateFromMonth("september", BaseDate));
            Assert.AreEqual(new DateTime(2017, 10, 1), DateComponent.GetNextDateFromMonth("october", BaseDate));
            Assert.AreEqual(new DateTime(2017, 11, 1), DateComponent.GetNextDateFromMonth("november", BaseDate));
            Assert.AreEqual(new DateTime(2017, 12, 1), DateComponent.GetNextDateFromMonth("december", BaseDate));

            Assert.AreEqual(BaseDate, DateComponent.GetNextDateFromMonth("invalid", BaseDate));
        }
コード例 #11
0
        public void GetWeekDayFromNameTest()
        {
            Assert.AreEqual(1, DateComponent.GetWeekDayFromName("sunday"));
            Assert.AreEqual(2, DateComponent.GetWeekDayFromName("monday"));
            Assert.AreEqual(3, DateComponent.GetWeekDayFromName("tuesday"));
            Assert.AreEqual(4, DateComponent.GetWeekDayFromName("wednesday"));
            Assert.AreEqual(5, DateComponent.GetWeekDayFromName("thursday"));
            Assert.AreEqual(6, DateComponent.GetWeekDayFromName("friday"));
            Assert.AreEqual(7, DateComponent.GetWeekDayFromName("saturday"));

            //Abbreviation
            Assert.AreEqual(-1, DateComponent.GetWeekDayFromName("s"));
            Assert.AreEqual(-1, DateComponent.GetWeekDayFromName("su"));
            Assert.AreEqual(1, DateComponent.GetWeekDayFromName("sun"));

            //Case-sensitivity
            Assert.AreEqual(4, DateComponent.GetWeekDayFromName("WedNeSdAy"));

            //Invalid
            Assert.AreEqual(-1, DateComponent.GetWeekDayFromName("invalid"));
            Assert.AreEqual(-1, DateComponent.GetMonthFromName(" monday"));
            Assert.AreEqual(-1, DateComponent.GetMonthFromName("thursday "));
        }
コード例 #12
0
        /// <summary>
        /// Gets a single component of this date.
        /// </summary>
        /// <param name="component"> The date component to extract. </param>
        /// <param name="localOrUniversal"> Indicates whether to retrieve the component in local
        /// or universal time. </param>
        /// <returns> The date component value, or <c>NaN</c> if the date is invalid. </returns>
        private double GetDateComponent(DateComponent component, DateTimeKind localOrUniversal)
        {
            if (this.value == InvalidDate)
                return double.NaN;

            // Convert the date to local or universal time.
            switch (localOrUniversal)
            {
                case DateTimeKind.Local:
                    this.value = this.Value.ToLocalTime();
                    break;
                case DateTimeKind.Utc:
                    this.value = this.Value.ToUniversalTime();
                    break;
                default:
                    throw new ArgumentOutOfRangeException("localOrUniversal");
            }

            // Extract the requested component.
            switch (component)
            {
                case DateComponent.Year:
                    return this.value.Year;
                case DateComponent.Month:
                    return this.value.Month - 1;    // Javascript month is 0-11.
                case DateComponent.Day:
                    return this.value.Day;
                case DateComponent.DayOfWeek:
                    return (double)this.value.DayOfWeek;
                case DateComponent.Hour:
                    return this.value.Hour;
                case DateComponent.Minute:
                    return this.value.Minute;
                case DateComponent.Second:
                    return this.value.Second;
                case DateComponent.Millisecond:
                    return this.value.Millisecond;
                default:
                    throw new ArgumentOutOfRangeException("component");
            }
        }
コード例 #13
0
        /// <summary>
        /// Sets one or more components of this date.
        /// </summary>
        /// <param name="firstComponent"> The first date component to set. </param>
        /// <param name="localOrUniversal"> Indicates whether to set the component(s) in local
        /// or universal time. </param>
        /// <param name="componentValues"> One or more date component values. </param>
        /// <returns> The number of milliseconds elapsed since January 1, 1970, 00:00:00 UTC for
        /// the new date. </returns>
        private double SetDateComponents(DateComponent firstComponent, DateTimeKind localOrUniversal, params double[] componentValues)
        {
            // Convert the date to local or universal time.
            switch (localOrUniversal)
            {
                case DateTimeKind.Local:
                    this.value = this.Value.ToLocalTime();
                    break;
                case DateTimeKind.Utc:
                    this.value = this.Value.ToUniversalTime();
                    break;
                default:
                    throw new ArgumentOutOfRangeException("localOrUniversal");
            }

            // Get the current component values of the date.
            int[] allComponentValues = new int[7];
            allComponentValues[0] = this.value.Year;
            allComponentValues[1] = this.value.Month - 1;   // Javascript month is 0-11.
            allComponentValues[2] = this.value.Day;
            allComponentValues[3] = this.value.Hour;
            allComponentValues[4] = this.value.Minute;
            allComponentValues[5] = this.value.Second;
            allComponentValues[6] = this.value.Millisecond;

            // Overwrite the component values with the new ones that were passed in.
            for (int i = 0; i < componentValues.Length; i++)
            {
                double componentValue = componentValues[i];
                if (double.IsNaN(componentValue) || double.IsInfinity(componentValue))
                {
                    this.value = InvalidDate;
                    return this.ValueInMilliseconds;
                }
                allComponentValues[(int)firstComponent + i] = (int)componentValue;
            }

            // Construct a new date.
            this.value = ToDateTime(allComponentValues[0], allComponentValues[1], allComponentValues[2],
                allComponentValues[3], allComponentValues[4], allComponentValues[5], allComponentValues[6],
                localOrUniversal);

            // Return the date value.
            return this.ValueInMilliseconds;
        }
コード例 #14
0
ファイル: RulerMark.cs プロジェクト: sabrogden/logjoint
 public TimeRulerMark(DateTime d, bool isMajor, DateComponent comp)
 {
     Time      = d;
     IsMajor   = isMajor;
     Component = comp;
 }