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); }