public static bool TryParse(Queue <Token> unProcessedTokens, out AbstractDayOfMonthSpecification dayOfMonthSpecification) { if (TryGetDayOfWeekGreaterThanOrEqualToDayOfMonthSpecification(unProcessedTokens, out dayOfMonthSpecification)) { return(true); } if (TryGetDayOfWeekLessThanOrEqualToDayOfMonthSpecification(unProcessedTokens, out dayOfMonthSpecification)) { return(true); } if (TryGetExplicitDayOfMonthSpecification(unProcessedTokens, out dayOfMonthSpecification)) { return(true); } if (TryGetLastWeekdayOfMonthSpecification(unProcessedTokens, out dayOfMonthSpecification)) { return(true); } dayOfMonthSpecification = null; return(false); }
public TzDbRule(String name, AbstractYearSpecification from, AbstractYearSpecification to, String type, MonthOfYear @in, AbstractDayOfMonthSpecification on, AbstractTime at, TimeSpan save, TimeZoneAbbreviationVariable letter) : this() { Name = name; From = from; To = to; Type = type; In = @in; On = on; At = at; Save = save; Letter = letter; }
private static bool TryGetExplicitDayOfMonthSpecification(Queue <Token> unProcessedTokens, out AbstractDayOfMonthSpecification dayOfMonthSpecification) { const String explicitDayOfMonthRegex = @"^\d{1,2}$"; // check if the next token is an explicit day of month specification token if (Regex.IsMatch(unProcessedTokens.Peek().Value, explicitDayOfMonthRegex)) { string dayOfMonthSpecificationString = unProcessedTokens.Dequeue().Value; dayOfMonthSpecification = new ExplicitDayOfMonthSpecification(int.Parse(dayOfMonthSpecificationString)); return(true); } dayOfMonthSpecification = null; return(false); }
public static bool TryParse(Queue <Token> unProcessedTokens, out TzDbRule?tzDbRule) { // the value of the first token of every link entry is Rule const String ruleRegex = "Rule"; if (Regex.IsMatch(unProcessedTokens.Peek().Value, ruleRegex)) { try { // dequeue Rule token and discard unProcessedTokens.Dequeue(); string name = unProcessedTokens.Dequeue().Value; AbstractYearSpecification from = YearSpecificationExpression.Parse(unProcessedTokens); AbstractYearSpecification to = ParseToExpression(unProcessedTokens, from); string type = unProcessedTokens.Dequeue().Value; MonthOfYear @in = MonthOfYearExpression.Parse(unProcessedTokens); AbstractDayOfMonthSpecification on = DayOfMonthSpecificationExpression.Parse(unProcessedTokens); AbstractTime at = TzDbTimeExpression.Parse(unProcessedTokens); TimeSpan save = TimeSpanExpression.Parse(unProcessedTokens); TimeZoneAbbreviationVariable letter = TimeZoneAbbreviationVariableExpression.Parse(unProcessedTokens); tzDbRule = new TzDbRule(name, from, to, type, @in, on, at, save, letter); Token endLineToken = unProcessedTokens.Dequeue(); // guard end of line token was present if (endLineToken.TokenType != TokenType.EndLine) { string msg = String.Format( "received unexpected token type:{0} when token type should have been {1}", endLineToken.TokenType, TokenType.EndLine); throw new Exception(msg); } return(true); } catch (Exception e) { string msg = String.Format("Unable to parse {0}", typeof(RuleExpression).Name); throw new Exception(msg, e); } } tzDbRule = null; return(false); }
public DaylightSavingsRule( TimeSpan adjustmentToStandardOffset, AbstractYearSpecification utcEffectiveFromSpecification, AbstractYearSpecification utcEffectiveToSpecification, MonthOfYear occursIn, AbstractDayOfMonthSpecification occursOnSpecification, AbstractTime occursAt, TimeZoneAbbreviationVariable timeZoneAbbreviationVariable, Guid?id = null ) { AdjustmentToStandardOffset = adjustmentToStandardOffset; UtcEffectiveFromSpecification = utcEffectiveFromSpecification; UtcEffectiveToSpecification = utcEffectiveToSpecification; OccursIn = occursIn; OccursOnSpecification = occursOnSpecification; OccursAt = occursAt; TimeZoneAbbreviationVariable = timeZoneAbbreviationVariable; Id = id ?? Guid.NewGuid(); }
public DayOfYearSpecification(MonthOfYear monthOfYear, AbstractDayOfMonthSpecification dayOfMonthSpecification) : this() { MonthOfYear = monthOfYear; DayOfMonthSpecification = dayOfMonthSpecification; }
private static bool TryGetDayOfWeekGreaterThanOrEqualToDayOfMonthSpecification( Queue <Token> unProcessedTokens, out AbstractDayOfMonthSpecification dayOfMonthSpecification) { const String weekdayGreaterThanOrEqualToDayRegexFormat = @"^{0}>=\d{{1,2}}$"; string weekdayGreaterThanOrEqualToDayRegex = String.Format(weekdayGreaterThanOrEqualToDayRegexFormat, DaysOfWeekRegex); string mondayGreaterThanOrEqualToDayRegex = String.Format(weekdayGreaterThanOrEqualToDayRegexFormat, MondayRegex); string tuesdayGreaterThanOrEqualToDayRegex = String.Format(weekdayGreaterThanOrEqualToDayRegexFormat, TuesdayRegex); string wednesdayGreaterThanOrEqualToDayRegex = String.Format(weekdayGreaterThanOrEqualToDayRegexFormat, WednesdayRegex); string thursdayGreaterThanOrEqualToDayRegex = String.Format(weekdayGreaterThanOrEqualToDayRegexFormat, ThursdayRegex); string fridayGreaterThanOrEqualToDayRegex = String.Format(weekdayGreaterThanOrEqualToDayRegexFormat, FridayRegex); string saturdayGreaterThanOrEqualToDayRegex = String.Format(weekdayGreaterThanOrEqualToDayRegexFormat, SaturdayRegex); string sundayGreaterThanOrEqualToDayRegex = String.Format(weekdayGreaterThanOrEqualToDayRegexFormat, SundayRegex); // check if the next token is a day of week greater than or equal to day of month specification token if (Regex.IsMatch(unProcessedTokens.Peek().Value, weekdayGreaterThanOrEqualToDayRegex)) { string dayOfMonthSpecificationString = unProcessedTokens.Dequeue().Value; if (Regex.IsMatch(dayOfMonthSpecificationString, mondayGreaterThanOrEqualToDayRegex)) { int dayOfMonth = ParseDayOfMonthFromInequality(dayOfMonthSpecificationString); dayOfMonthSpecification = new DayOfWeekGreaterThanOrEqualToDayOfMonthSpecification(DayOfWeek.Monday, dayOfMonth); return(true); } if (Regex.IsMatch(dayOfMonthSpecificationString, tuesdayGreaterThanOrEqualToDayRegex)) { int dayOfMonth = ParseDayOfMonthFromInequality(dayOfMonthSpecificationString); dayOfMonthSpecification = new DayOfWeekGreaterThanOrEqualToDayOfMonthSpecification( DayOfWeek.Tuesday, dayOfMonth); return(true); } if (Regex.IsMatch(dayOfMonthSpecificationString, wednesdayGreaterThanOrEqualToDayRegex)) { int dayOfMonth = ParseDayOfMonthFromInequality(dayOfMonthSpecificationString); dayOfMonthSpecification = new DayOfWeekGreaterThanOrEqualToDayOfMonthSpecification( DayOfWeek.Wednesday, dayOfMonth); return(true); } if (Regex.IsMatch(dayOfMonthSpecificationString, thursdayGreaterThanOrEqualToDayRegex)) { int dayOfMonth = ParseDayOfMonthFromInequality(dayOfMonthSpecificationString); dayOfMonthSpecification = new DayOfWeekGreaterThanOrEqualToDayOfMonthSpecification(DayOfWeek.Thursday, dayOfMonth); return(true); } if (Regex.IsMatch(dayOfMonthSpecificationString, fridayGreaterThanOrEqualToDayRegex)) { int dayOfMonth = ParseDayOfMonthFromInequality(dayOfMonthSpecificationString); dayOfMonthSpecification = new DayOfWeekGreaterThanOrEqualToDayOfMonthSpecification(DayOfWeek.Friday, dayOfMonth); return(true); } if (Regex.IsMatch(dayOfMonthSpecificationString, saturdayGreaterThanOrEqualToDayRegex)) { int dayOfMonth = ParseDayOfMonthFromInequality(dayOfMonthSpecificationString); dayOfMonthSpecification = new DayOfWeekGreaterThanOrEqualToDayOfMonthSpecification(DayOfWeek.Saturday, dayOfMonth); return(true); } if (Regex.IsMatch(dayOfMonthSpecificationString, sundayGreaterThanOrEqualToDayRegex)) { int dayOfMonth = ParseDayOfMonthFromInequality(dayOfMonthSpecificationString); dayOfMonthSpecification = new DayOfWeekGreaterThanOrEqualToDayOfMonthSpecification(DayOfWeek.Sunday, dayOfMonth); return(true); } string msg = String.Format( "Unable to parse day of week greater than or equal to day of month specification expression: {0}", dayOfMonthSpecificationString); throw new Exception(msg); } dayOfMonthSpecification = null; return(false); }
private static bool TryGetLastWeekdayOfMonthSpecification(Queue <Token> unProcessedTokens, out AbstractDayOfMonthSpecification dayOfMonthSpecification) { const String lastDayOfWeekRegexFormat = @"^last{0}$"; string lastDayOfWeekRegex = String.Format(lastDayOfWeekRegexFormat, DaysOfWeekRegex); string lastMondayRegex = String.Format(lastDayOfWeekRegexFormat, MondayRegex); string lastTuesdayRegex = String.Format(lastDayOfWeekRegexFormat, TuesdayRegex); string lastWednesdayRegex = String.Format(lastDayOfWeekRegexFormat, WednesdayRegex); string lastThursdayRegex = String.Format(lastDayOfWeekRegexFormat, ThursdayRegex); string lastFridayRegex = String.Format(lastDayOfWeekRegexFormat, FridayRegex); string lastSaturdayRegex = String.Format(lastDayOfWeekRegexFormat, SaturdayRegex); string lastSundayRegex = String.Format(lastDayOfWeekRegexFormat, SundayRegex); // check if the next token is a last weekday of month specification token if (Regex.IsMatch(unProcessedTokens.Peek().Value, lastDayOfWeekRegex)) { string dayOfMonthSpecificationString = unProcessedTokens.Dequeue().Value; if (Regex.IsMatch(dayOfMonthSpecificationString, lastMondayRegex)) { dayOfMonthSpecification = new LastWeekdayOfMonthSpecification(DayOfWeek.Monday); return(true); } if (Regex.IsMatch(dayOfMonthSpecificationString, lastTuesdayRegex)) { dayOfMonthSpecification = new LastWeekdayOfMonthSpecification(DayOfWeek.Tuesday); return(true); } if (Regex.IsMatch(dayOfMonthSpecificationString, lastWednesdayRegex)) { dayOfMonthSpecification = new LastWeekdayOfMonthSpecification(DayOfWeek.Wednesday); return(true); } if (Regex.IsMatch(dayOfMonthSpecificationString, lastThursdayRegex)) { dayOfMonthSpecification = new LastWeekdayOfMonthSpecification(DayOfWeek.Thursday); return(true); } if (Regex.IsMatch(dayOfMonthSpecificationString, lastFridayRegex)) { dayOfMonthSpecification = new LastWeekdayOfMonthSpecification(DayOfWeek.Friday); return(true); } if (Regex.IsMatch(dayOfMonthSpecificationString, lastSaturdayRegex)) { dayOfMonthSpecification = new LastWeekdayOfMonthSpecification(DayOfWeek.Saturday); return(true); } if (Regex.IsMatch(dayOfMonthSpecificationString, lastSundayRegex)) { dayOfMonthSpecification = new LastWeekdayOfMonthSpecification(DayOfWeek.Sunday); return(true); } string msg = String.Format("Unable to parse last weekday of month specification expression: {0}", dayOfMonthSpecificationString); throw new Exception(msg); } dayOfMonthSpecification = null; return(false); }