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