Esempio n. 1
0
        private IEnumerable <TimeZoneImplementation> GetTimeZoneImplementations(Guid timeZoneId,
                                                                                TzDbZoneDefinition tzDbZoneDefinition, IEnumerable <IGrouping <string, TzDbRule> > tzDbRuleGroups)
        {
            // get the daylightSavingsAdjustment for the current zone
            AbstractDaylightSavingsAdjustment offsetAdjustment =
                FindOrCreateDaylightSavingsAdjustment(tzDbZoneDefinition.Zone.Rules, tzDbRuleGroups);

            var timeZoneImplementations = new List <TimeZoneImplementation>
            {
                tzDbZoneDefinition.Zone.ToTimeZoneImplementation(offsetAdjustment)
            };

            // process the zone continuations for the current zone
            foreach (TzDbZoneContinuation tzDbZoneContinuation in tzDbZoneDefinition.ContinuationLines)
            {
                AbstractDaylightSavingsAdjustment zoneContinuationOffsetAdjustment =
                    FindOrCreateDaylightSavingsAdjustment(tzDbZoneContinuation.Rules, tzDbRuleGroups);

                // create a TimeZoneImplementation from this zone definitions zone continuation
                timeZoneImplementations.Add(
                    tzDbZoneContinuation.ToTimeZoneImplementation(zoneContinuationOffsetAdjustment));
            }

            return(timeZoneImplementations);
        }
Esempio n. 2
0
 private IEnumerable <TimeZoneAlias> FindTimeZoneAliases(TzDbZoneDefinition tzDbZoneDefinition,
                                                         IEnumerable <TzDbLink> tzDbLinks)
 {
     return
         (tzDbLinks.Where(tzDbLink => tzDbLink.LinkFrom == tzDbZoneDefinition.Zone.Name)
          .Select(tzDbLink => tzDbLink.ToTimeZoneAlias()));
 }
Esempio n. 3
0
        private TzDbZoneDescription FindTzDbZoneDescription(TzDbZoneDefinition tzDbZoneDefinition,
                                                            IEnumerable <TzDbZoneDescription> tzDbZoneDescriptions, IEnumerable <TimeZoneAlias> aliases)
        {
            TzDbZoneDescription description =
                tzDbZoneDescriptions.SingleOrDefault(
                    tzDbZoneDescription => tzDbZoneDescription.Tz == tzDbZoneDefinition.Zone.Name);

            if (null == description)
            {
                tzDbZoneDescriptions.SingleOrDefault(
                    tzDbZoneDescription => aliases.Any(alias => alias.Name == tzDbZoneDescription.Tz));
            }

            return(description);
        }
Esempio n. 4
0
        public static bool TryParse(Queue <Token> unProcessedTokens, out TzDbZoneDefinition tzDbZoneDefinition)
        {
            try
            {
                // the value of the first token of every zone entry is Zone
                TzDbZone?tzDbZone;
                if (ZoneExpression.TryParse(unProcessedTokens, out tzDbZone))
                {
                    // if Until column of zone line is null this zone has no continuation lines
                    if (null == tzDbZone.Value.Until)
                    {
                        tzDbZoneDefinition = new TzDbZoneDefinition(tzDbZone.Value, new List <TzDbZoneContinuation>());

                        return(true);
                    }

                    // dequeue start of line token and discard
                    unProcessedTokens.Dequeue();

                    var continuationLines = new List <TzDbZoneContinuation>
                    {
                        ZoneContinuationExpression.Parse(unProcessedTokens, tzDbZone.Value.Name)
                    };

                    // keep parsing zone continuations until we hit one that has a null until column
                    while (null != continuationLines.Last().Until)
                    {
                        // dequeue start of line token and discard
                        unProcessedTokens.Dequeue();

                        continuationLines.Add(ZoneContinuationExpression.Parse(unProcessedTokens, tzDbZone.Value.Name));
                    }

                    tzDbZoneDefinition = new TzDbZoneDefinition(tzDbZone.Value, continuationLines);
                    return(true);
                }
                tzDbZoneDefinition = null;
                return(false);
            }
            catch (Exception e)
            {
                throw new Exception("Error occured while parsing zone definition", e);
            }
        }