internal bool TryParse(string str, out DateTimeInterval interval) { interval = default(DateTimeInterval); if (str == null) { this.error = ParseError.ArgumentNull; return(false); } if (str.Length == 0) { this.error = ParseError.Format; return(false); } IList <Token> tokens; var tokenizer = new Tokenizer(str); try { tokens = tokenizer.Tokenize(); } catch (FormatException) { this.error = ParseError.Format; return(false); } catch (OverflowException) { this.error = ParseError.Overflow; return(false); } catch (ArgumentOutOfRangeException) { this.error = ParseError.ArgumentOutOfRange; return(false); } if (tokens.Count == 0 || tokens.Count > 2) { this.error = ParseError.Format; return(false); } int hours = 0; int days = 0; int months = 0; int weeks = 0; foreach (Token token in tokens) { if (token is HourToken) { hours = token.Value; } if (token is DayToken) { days = token.Value; } else if (token is MonthToken) { months = token.Value; } else if (token is WeekToken) { weeks = token.Value; } } interval = new DateTimeInterval(hours, days, months, weeks); return(true); }
/// <summary> /// Subtracts the interval. /// </summary> /// <param name="dateSpan">The date span.</param> /// <param name="dateTimeInterval">The date time interval.</param> /// <returns></returns> public static TimeSlot SubtractInterval(this IDateSpan dateSpan, DateTimeInterval dateTimeInterval) { return(new TimeSlot( dateSpan.Start.AddDays(-dateTimeInterval.Days).AddMonths(-dateTimeInterval.Months), dateSpan.End.AddDays(-dateTimeInterval.Days).AddMonths(-dateTimeInterval.Months))); }