Beispiel #1
0
            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)));
 }