public static bool TryParse(Queue <Token> unProcessedTokens, out TzDbAbstractDateTime dateTime) { try { Date date; if (TzDbDateExpression.TryParse(unProcessedTokens, out date)) { AbstractTime time; if (!TzDbTimeExpression.TryParse(unProcessedTokens, out time)) { // default to specify local time at midnight time = new LocalTime(); } dateTime = CreateDateTime(date, time); return(true); } dateTime = null; return(false); } catch (Exception e) { throw new Exception("Error occured while parsing date time specification expression", e); } }
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); }