private TimeSpan ReadValueAsTimeSpan(ContactValueSeparators? expectedSeparators)
		{
			this.reader.AssertValidState(ContentLineNodeType.Parameter | ContentLineNodeType.Property);
			string s = this.ReadValueAsString(expectedSeparators).Trim();
			this.CheckType(ContactValueType.UtcOffset);
			return ContactCommon.ParseUtcOffset(s, this.reader.ComplianceTracker);
		}
        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);
        }