Ejemplo n.º 1
0
        public static DateTime ParseDateTime(string s, ComplianceTracker tracker)
        {
            int length = s.Length;

            if (length < 15)
            {
                tracker.SetComplianceStatus(ComplianceStatus.InvalidValueFormat, CalendarStrings.InvalidDateTimeLength);
                return(ContactCommon.MinDateTime);
            }
            string text = "yyyyMMdd";
            int    num  = 8;

            if (s[4] == '-')
            {
                text = "yyyy-MM-dd";
                num  = 10;
            }
            if (s[num + 3] == ':')
            {
                text += "\\THH:mm:ss";
                num  += 9;
            }
            else
            {
                text += "\\THHmmss";
                num  += 7;
            }
            if (length < num)
            {
                tracker.SetComplianceStatus(ComplianceStatus.InvalidValueFormat, CalendarStrings.InvalidDateTimeLength);
                return(ContactCommon.MinDateTime);
            }
            return(ContactCommon.InternalParseDateTime(s, length, text, num, tracker));
        }
Ejemplo n.º 2
0
        public static TimeSpan ParseUtcOffset(string s, ComplianceTracker tracker)
        {
            int length = s.Length;

            if (length != 5 && length != 6)
            {
                tracker.SetComplianceStatus(ComplianceStatus.InvalidValueFormat, CalendarStrings.InvalidUtcOffsetLength);
                return(TimeSpan.Zero);
            }
            bool flag = false;

            if (s[0] == '-')
            {
                flag = true;
            }
            else if (s[0] != '+')
            {
                tracker.SetComplianceStatus(ComplianceStatus.InvalidValueFormat, CalendarStrings.ExpectedPlusMinus);
                return(TimeSpan.Zero);
            }
            DateTime dateTime;

            if (!DateTime.TryParseExact(s.Substring(1), "HH:mm", CultureInfo.InvariantCulture, DateTimeStyles.None, out dateTime) && !DateTime.TryParseExact(s.Substring(1), "HHmm", CultureInfo.InvariantCulture, DateTimeStyles.None, out dateTime))
            {
                tracker.SetComplianceStatus(ComplianceStatus.InvalidValueFormat, CalendarStrings.InvalidValueFormat);
                return(TimeSpan.Zero);
            }
            TimeSpan result = new TimeSpan(dateTime.Hour, dateTime.Minute, 0);

            if (flag)
            {
                return(result.Negate());
            }
            return(result);
        }
Ejemplo n.º 3
0
        internal CalendarTime(string s, ComplianceTracker tracker)
        {
            this.isUtc = false;
            if (s.Length != 6 && s.Length != 7)
            {
                tracker.SetComplianceStatus(ComplianceStatus.InvalidValueFormat, CalendarStrings.InvalidTimeStringLength);
                this.time = TimeSpan.Zero;
                return;
            }
            if (s.Length == 7)
            {
                if (s[6] != 'Z')
                {
                    tracker.SetComplianceStatus(ComplianceStatus.InvalidValueFormat, CalendarStrings.ExpectedZ);
                    this.time = TimeSpan.Zero;
                    return;
                }
                this.isUtc = true;
                s          = s.Substring(0, 6);
            }
            DateTime dateTime;

            if (!DateTime.TryParseExact(s, "HHmmss", CultureInfo.InvariantCulture, DateTimeStyles.None, out dateTime))
            {
                tracker.SetComplianceStatus(ComplianceStatus.InvalidValueFormat, CalendarStrings.InvalidTimeFormat);
                this.time = TimeSpan.Zero;
                return;
            }
            this.time = new TimeSpan(dateTime.Hour, dateTime.Minute, dateTime.Second);
        }
Ejemplo n.º 4
0
        public static TimeSpan ParseUtcOffset(string s, ComplianceTracker tracker)
        {
            int num    = 0;
            int num2   = 0;
            int num3   = 0;
            int length = s.Length;

            if (length != 5 && length != 7)
            {
                tracker.SetComplianceStatus(ComplianceStatus.InvalidValueFormat, CalendarStrings.InvalidUtcOffsetLength);
                return(TimeSpan.Zero);
            }
            char c = s[0];
            bool flag;

            if (c == '+')
            {
                flag = false;
            }
            else
            {
                if (c != '-')
                {
                    tracker.SetComplianceStatus(ComplianceStatus.InvalidValueFormat, CalendarStrings.ExpectedPlusMinus);
                    return(TimeSpan.Zero);
                }
                flag = true;
            }
            for (int i = 1; i < length; i++)
            {
                c = s[i];
                if ((int)c >= ContentLineParser.Dictionary.Length)
                {
                    tracker.SetComplianceStatus(ComplianceStatus.InvalidValueFormat, CalendarStrings.InvalidCharacter);
                    return(TimeSpan.Zero);
                }
                if ((byte)(ContentLineParser.Tokens.Digit & ContentLineParser.Dictionary[(int)c]) == 0)
                {
                    tracker.SetComplianceStatus(ComplianceStatus.InvalidValueFormat, CalendarStrings.InvalidToken);
                    return(TimeSpan.Zero);
                }
            }
            if (!int.TryParse(s.Substring(1, 2), out num) || num < 0 || num > 23)
            {
                tracker.SetComplianceStatus(ComplianceStatus.InvalidValueFormat, CalendarStrings.InvalidValueFormat);
            }
            if (!int.TryParse(s.Substring(3, 2), out num2) || num2 < 0 || num2 > 59)
            {
                tracker.SetComplianceStatus(ComplianceStatus.InvalidValueFormat, CalendarStrings.InvalidValueFormat);
            }
            if (length == 7 && (!int.TryParse(s.Substring(5, 2), out num3) || num3 < 0 || num3 > 59))
            {
                tracker.SetComplianceStatus(ComplianceStatus.InvalidValueFormat, CalendarStrings.InvalidValueFormat);
            }
            if (num == 0 && num2 == 0 && num3 == 0 && flag)
            {
                tracker.SetComplianceStatus(ComplianceStatus.InvalidValueFormat, CalendarStrings.InvalidValueFormat);
            }
            return(CalendarCommon.CreateTimeSpan(tracker, 0, num, num2, num3, flag));
        }
Ejemplo n.º 5
0
        internal CalendarPeriod(string s, ComplianceTracker tracker)
        {
            int num = s.IndexOf('/');

            if (num <= 0 || s.Length - 1 == num)
            {
                tracker.SetComplianceStatus(ComplianceStatus.InvalidValueFormat, CalendarStrings.InvalidTimeFormat);
                this.start            = CalendarCommon.MinDateTime;
                this.end              = CalendarCommon.MinDateTime;
                this.duration         = TimeSpan.Zero;
                this.isExplicitPeriod = false;
                return;
            }
            DateTime dateTime = CalendarCommon.ParseDateTime(s.Substring(0, num), tracker);
            char     c        = s[num + 1];

            if (c == '+' || c == '-' || c == 'P')
            {
                TimeSpan t = CalendarCommon.ParseDuration(s.Substring(num + 1), tracker);
                this.start            = dateTime;
                this.end              = dateTime + t;
                this.duration         = t;
                this.isExplicitPeriod = false;
                return;
            }
            DateTime d = CalendarCommon.ParseDateTime(s.Substring(num + 1), tracker);

            this.start            = dateTime;
            this.end              = d;
            this.duration         = dateTime - d;
            this.isExplicitPeriod = true;
        }
Ejemplo n.º 6
0
        public static DateTime ParseDateTime(string s, ComplianceTracker tracker)
        {
            int length = s.Length;

            if (length != 15 && length != 16)
            {
                tracker.SetComplianceStatus(ComplianceStatus.InvalidValueFormat, CalendarStrings.InvalidDateTimeLength);
                return(CalendarCommon.MinDateTime);
            }
            DateTime dateTime = CalendarCommon.ParseDate(s.Substring(0, 8), tracker);

            if (s[8] != 'T')
            {
                tracker.SetComplianceStatus(ComplianceStatus.InvalidValueFormat, CalendarStrings.ExpectedTAfterDate);
                return(CalendarCommon.MinDateTime);
            }
            CalendarTime calendarTime = new CalendarTime(s.Substring(9), tracker);

            return(new DateTime(dateTime.Year, dateTime.Month, dateTime.Day, calendarTime.Time.Hours, calendarTime.Time.Minutes, calendarTime.Time.Seconds, calendarTime.IsUtc ? DateTimeKind.Utc : DateTimeKind.Unspecified));
        }
Ejemplo n.º 7
0
        public static DateTime ParseDate(string s, ComplianceTracker tracker)
        {
            DateTime result;

            if (!DateTime.TryParseExact(s, "yyyyMMdd", CultureInfo.InvariantCulture, DateTimeStyles.None, out result))
            {
                tracker.SetComplianceStatus(ComplianceStatus.InvalidValueFormat, CalendarStrings.InvalidDateFormat);
                return(CalendarCommon.MinDateTime);
            }
            return(result);
        }
Ejemplo n.º 8
0
        public static DateTime ParseTime(string s, ComplianceTracker tracker)
        {
            int length = s.Length;

            if (length < 6)
            {
                tracker.SetComplianceStatus(ComplianceStatus.InvalidValueFormat, CalendarStrings.InvalidDateTimeLength);
                return(ContactCommon.MinDateTime);
            }
            string format = "HHmmss";
            int    num    = 6;

            if (s[2] == ':')
            {
                format = "HH:mm:ss";
                num    = 8;
            }
            if (length < num)
            {
                tracker.SetComplianceStatus(ComplianceStatus.InvalidValueFormat, CalendarStrings.InvalidDateTimeLength);
                return(ContactCommon.MinDateTime);
            }
            return(ContactCommon.InternalParseDateTime(s, length, format, num, tracker));
        }
Ejemplo n.º 9
0
        private static TimeSpan CreateTimeSpan(ComplianceTracker tracker, int days, int hours, int minutes, int seconds, bool negative)
        {
            TimeSpan result;

            try
            {
                result = new TimeSpan(days, hours, minutes, seconds);
            }
            catch (ArgumentOutOfRangeException)
            {
                tracker.SetComplianceStatus(ComplianceStatus.InvalidValueFormat, CalendarStrings.InvalidTimeFormat);
                return(TimeSpan.Zero);
            }
            if (negative)
            {
                result = result.Negate();
            }
            return(result);
        }
Ejemplo n.º 10
0
        private static DateTime InternalParseDateTime(string s, int length, string format, int formatLength, ComplianceTracker tracker)
        {
            string text  = string.Empty;
            string text2 = string.Empty;

            if (length > formatLength)
            {
                if (s[formatLength] == ',')
                {
                    int num = formatLength + 1;
                    while (num < length && char.IsDigit(s[num]))
                    {
                        num++;
                    }
                    if (num == formatLength + 1)
                    {
                        tracker.SetComplianceStatus(ComplianceStatus.InvalidValueFormat, CalendarStrings.InvalidDateFormat);
                        return(ContactCommon.MinDateTime);
                    }
                    text2 = s.Substring(formatLength + 1, num - (formatLength + 1));
                    if (num < length)
                    {
                        text = s.Substring(num);
                    }
                }
                else
                {
                    text = s.Substring(formatLength);
                }
                s = s.Substring(0, formatLength);
            }
            DateTime dateTime;

            if (!DateTime.TryParseExact(s, format, CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal | DateTimeStyles.AssumeUniversal, out dateTime))
            {
                tracker.SetComplianceStatus(ComplianceStatus.InvalidValueFormat, CalendarStrings.InvalidDateFormat);
                return(ContactCommon.MinDateTime);
            }
            if (!string.IsNullOrEmpty(text2))
            {
                if (text2.Length > 3)
                {
                    text2 = text2.Substring(0, 3);
                }
                int num2 = 0;
                if (!int.TryParse(text2, out num2))
                {
                    tracker.SetComplianceStatus(ComplianceStatus.InvalidValueFormat, CalendarStrings.InvalidDateFormat);
                    return(ContactCommon.MinDateTime);
                }
                for (int i = text2.Length; i < 3; i++)
                {
                    num2 *= 10;
                }
                dateTime += new TimeSpan(0, 0, 0, 0, num2);
            }
            if (!string.IsNullOrEmpty(text) && text != "Z")
            {
                dateTime += ContactCommon.ParseUtcOffset(text, tracker);
            }
            return(dateTime);
        }
Ejemplo n.º 11
0
        public static TimeSpan ParseDuration(string s, ComplianceTracker tracker)
        {
            int num    = 0;
            int length = s.Length;

            CalendarCommon.DurationParseStates durationParseStates = CalendarCommon.DurationParseStates.Start;
            StringBuilder stringBuilder = null;
            int           num2          = 0;
            int           num3          = 0;
            int           hours         = 0;
            int           minutes       = 0;
            int           seconds       = 0;
            bool          negative      = false;

            while (num < length && durationParseStates != CalendarCommon.DurationParseStates.End)
            {
                char c = s[num];
                if ((int)c >= ContentLineParser.Dictionary.Length)
                {
                    tracker.SetComplianceStatus(ComplianceStatus.InvalidValueFormat, CalendarStrings.InvalidCharacter);
                    return(TimeSpan.Zero);
                }
                switch (durationParseStates)
                {
                case CalendarCommon.DurationParseStates.Start:
                    if (c == 'P')
                    {
                        durationParseStates = CalendarCommon.DurationParseStates.S1;
                    }
                    else if (c == '+')
                    {
                        durationParseStates = CalendarCommon.DurationParseStates.Sign;
                    }
                    else
                    {
                        if (c != '-')
                        {
                            tracker.SetComplianceStatus(ComplianceStatus.InvalidValueFormat, CalendarStrings.InvalidCharacter);
                            return(TimeSpan.Zero);
                        }
                        negative            = true;
                        durationParseStates = CalendarCommon.DurationParseStates.Sign;
                    }
                    break;

                case CalendarCommon.DurationParseStates.Sign:
                    if (c != 'P')
                    {
                        tracker.SetComplianceStatus(ComplianceStatus.InvalidValueFormat, CalendarStrings.ExpectedP);
                        return(TimeSpan.Zero);
                    }
                    durationParseStates = CalendarCommon.DurationParseStates.S1;
                    break;

                case CalendarCommon.DurationParseStates.S1:
                    if ((byte)(ContentLineParser.Tokens.Digit & ContentLineParser.Dictionary[(int)c]) != 0)
                    {
                        stringBuilder = new StringBuilder();
                        stringBuilder.Append(c);
                        durationParseStates = CalendarCommon.DurationParseStates.S2;
                    }
                    else
                    {
                        if (c != 'T')
                        {
                            tracker.SetComplianceStatus(ComplianceStatus.InvalidValueFormat, CalendarStrings.InvalidCharacter);
                            return(TimeSpan.Zero);
                        }
                        durationParseStates = CalendarCommon.DurationParseStates.T1;
                    }
                    break;

                case CalendarCommon.DurationParseStates.S2:
                    while ((byte)(ContentLineParser.Tokens.Digit & ContentLineParser.Dictionary[(int)c]) != 0)
                    {
                        stringBuilder.Append(c);
                        if (++num == length)
                        {
                            tracker.SetComplianceStatus(ComplianceStatus.InvalidValueFormat, CalendarStrings.ExpectedWOrD);
                            return(TimeSpan.Zero);
                        }
                        c = s[num];
                        if ((int)c >= ContentLineParser.Dictionary.Length)
                        {
                            tracker.SetComplianceStatus(ComplianceStatus.InvalidValueFormat, CalendarStrings.InvalidCharacter);
                            return(TimeSpan.Zero);
                        }
                    }
                    if (c == 'W')
                    {
                        if (!int.TryParse(stringBuilder.ToString(), out num3))
                        {
                            tracker.SetComplianceStatus(ComplianceStatus.InvalidValueFormat, CalendarStrings.InvalidValueFormat);
                        }
                        durationParseStates = CalendarCommon.DurationParseStates.End;
                    }
                    else
                    {
                        if (c != 'D')
                        {
                            tracker.SetComplianceStatus(ComplianceStatus.InvalidValueFormat, CalendarStrings.InvalidCharacter);
                            return(TimeSpan.Zero);
                        }
                        if (!int.TryParse(stringBuilder.ToString(), out num2))
                        {
                            tracker.SetComplianceStatus(ComplianceStatus.InvalidValueFormat, CalendarStrings.InvalidValueFormat);
                        }
                        durationParseStates = CalendarCommon.DurationParseStates.D1;
                    }
                    break;

                case CalendarCommon.DurationParseStates.D1:
                    if (c != 'T')
                    {
                        tracker.SetComplianceStatus(ComplianceStatus.InvalidValueFormat, CalendarStrings.ExpectedT);
                        return(TimeSpan.Zero);
                    }
                    durationParseStates = CalendarCommon.DurationParseStates.T1;
                    break;

                case CalendarCommon.DurationParseStates.T1:
                    if ((byte)(ContentLineParser.Tokens.Digit & ContentLineParser.Dictionary[(int)c]) == 0)
                    {
                        tracker.SetComplianceStatus(ComplianceStatus.InvalidValueFormat, CalendarStrings.InvalidCharacter);
                        return(TimeSpan.Zero);
                    }
                    stringBuilder = new StringBuilder();
                    stringBuilder.Append(c);
                    durationParseStates = CalendarCommon.DurationParseStates.T2;
                    break;

                case CalendarCommon.DurationParseStates.T2:
                    while ((byte)(ContentLineParser.Tokens.Digit & ContentLineParser.Dictionary[(int)c]) != 0)
                    {
                        stringBuilder.Append(c);
                        if (++num == length)
                        {
                            tracker.SetComplianceStatus(ComplianceStatus.InvalidValueFormat, CalendarStrings.ExpectedHMS);
                            return(TimeSpan.Zero);
                        }
                        c = s[num];
                        if ((int)c >= ContentLineParser.Dictionary.Length)
                        {
                            tracker.SetComplianceStatus(ComplianceStatus.InvalidValueFormat, CalendarStrings.InvalidCharacter);
                            return(TimeSpan.Zero);
                        }
                    }
                    if (c == 'H')
                    {
                        if (!int.TryParse(stringBuilder.ToString(), out hours))
                        {
                            tracker.SetComplianceStatus(ComplianceStatus.InvalidValueFormat, CalendarStrings.InvalidValueFormat);
                        }
                        durationParseStates = CalendarCommon.DurationParseStates.H1;
                    }
                    else if (c == 'M')
                    {
                        if (!int.TryParse(stringBuilder.ToString(), out minutes))
                        {
                            tracker.SetComplianceStatus(ComplianceStatus.InvalidValueFormat, CalendarStrings.InvalidValueFormat);
                        }
                        durationParseStates = CalendarCommon.DurationParseStates.M1;
                    }
                    else
                    {
                        if (c != 'S')
                        {
                            tracker.SetComplianceStatus(ComplianceStatus.InvalidValueFormat, CalendarStrings.InvalidCharacter);
                            return(TimeSpan.Zero);
                        }
                        if (!int.TryParse(stringBuilder.ToString(), out seconds))
                        {
                            tracker.SetComplianceStatus(ComplianceStatus.InvalidValueFormat, CalendarStrings.InvalidValueFormat);
                        }
                        durationParseStates = CalendarCommon.DurationParseStates.End;
                    }
                    break;

                case CalendarCommon.DurationParseStates.H1:
                    if ((byte)(ContentLineParser.Tokens.Digit & ContentLineParser.Dictionary[(int)c]) == 0)
                    {
                        tracker.SetComplianceStatus(ComplianceStatus.InvalidValueFormat, CalendarStrings.InvalidCharacter);
                        return(TimeSpan.Zero);
                    }
                    stringBuilder = new StringBuilder();
                    stringBuilder.Append(c);
                    durationParseStates = CalendarCommon.DurationParseStates.H2;
                    break;

                case CalendarCommon.DurationParseStates.H2:
                    while ((byte)(ContentLineParser.Tokens.Digit & ContentLineParser.Dictionary[(int)c]) != 0)
                    {
                        stringBuilder.Append(c);
                        if (++num == length)
                        {
                            tracker.SetComplianceStatus(ComplianceStatus.InvalidValueFormat, CalendarStrings.ExpectedM);
                            return(TimeSpan.Zero);
                        }
                        c = s[num];
                        if ((int)c >= ContentLineParser.Dictionary.Length)
                        {
                            tracker.SetComplianceStatus(ComplianceStatus.InvalidValueFormat, CalendarStrings.InvalidCharacter);
                            return(TimeSpan.Zero);
                        }
                    }
                    if (c != 'M')
                    {
                        tracker.SetComplianceStatus(ComplianceStatus.InvalidValueFormat, CalendarStrings.InvalidCharacter);
                        return(TimeSpan.Zero);
                    }
                    if (!int.TryParse(stringBuilder.ToString(), out minutes))
                    {
                        tracker.SetComplianceStatus(ComplianceStatus.InvalidValueFormat, CalendarStrings.InvalidValueFormat);
                    }
                    durationParseStates = CalendarCommon.DurationParseStates.M1;
                    break;

                case CalendarCommon.DurationParseStates.M1:
                    if ((byte)(ContentLineParser.Tokens.Digit & ContentLineParser.Dictionary[(int)c]) == 0)
                    {
                        tracker.SetComplianceStatus(ComplianceStatus.InvalidValueFormat, CalendarStrings.InvalidCharacter);
                        return(TimeSpan.Zero);
                    }
                    stringBuilder = new StringBuilder();
                    stringBuilder.Append(c);
                    durationParseStates = CalendarCommon.DurationParseStates.M2;
                    break;

                case CalendarCommon.DurationParseStates.M2:
                    while ((byte)(ContentLineParser.Tokens.Digit & ContentLineParser.Dictionary[(int)c]) != 0)
                    {
                        stringBuilder.Append(c);
                        if (++num == length)
                        {
                            tracker.SetComplianceStatus(ComplianceStatus.InvalidValueFormat, CalendarStrings.ExpectedS);
                            return(TimeSpan.Zero);
                        }
                        c = s[num];
                        if ((int)c >= ContentLineParser.Dictionary.Length)
                        {
                            tracker.SetComplianceStatus(ComplianceStatus.InvalidValueFormat, CalendarStrings.InvalidCharacter);
                            return(TimeSpan.Zero);
                        }
                    }
                    if (c != 'S')
                    {
                        tracker.SetComplianceStatus(ComplianceStatus.InvalidValueFormat, CalendarStrings.InvalidCharacter);
                        return(TimeSpan.Zero);
                    }
                    if (!int.TryParse(stringBuilder.ToString(), out seconds))
                    {
                        tracker.SetComplianceStatus(ComplianceStatus.InvalidValueFormat, CalendarStrings.InvalidValueFormat);
                    }
                    durationParseStates = CalendarCommon.DurationParseStates.End;
                    break;

                default:
                    tracker.SetComplianceStatus(ComplianceStatus.InvalidValueFormat, CalendarStrings.InvalidValueFormat);
                    return(TimeSpan.Zero);
                }
                num++;
            }
            if (num != length)
            {
                tracker.SetComplianceStatus(ComplianceStatus.InvalidValueFormat, CalendarStrings.DurationDataNotEndedProperly);
                return(TimeSpan.Zero);
            }
            if (num3 != 0)
            {
                num2 += num3 * 7;
            }
            return(CalendarCommon.CreateTimeSpan(tracker, num2, hours, minutes, seconds, negative));
        }