/// <summary>
        ///     Polymorphic factory for creating a DateTime
        /// </summary>
        /// <param name="date"></param>
        /// <param name="time"></param>
        /// <returns></returns>
        private static TzDbAbstractDateTime CreateDateTime(Date date, AbstractTime time)
        {
            var localTime = time as LocalTime;

            if (null != localTime)
            {
                return(new TzDbLocalDateTime(date, localTime));
            }
            var standardTime = time as StandardTime;

            if (null != standardTime)
            {
                return(new TzDbStandardDateTime(date, standardTime));
            }
            var utcTime = time as UtcTime;

            if (null != utcTime)
            {
                return(new TzDbUtcDateTime(date, utcTime));
            }

            string msg = String.Format("Received unsupported implementation of {0}: {1}",
                                       typeof(AbstractTime).Name, time.GetType().Name);

            throw new Exception(msg);
        }
示例#2
0
 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;
 }
        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 static bool TryParse(Queue <Token> unProcessedTokens, out AbstractTime time)
        {
            string timeExpressionRegex = String.Format(@"^(({0})|({1})|({1}:{2})|({1}:{2}:{3})){4}?$", zeroRegex,
                                                       hoursRegex, minutesRegex, secondsRegex, timeTypeRegex);

            if (Regex.IsMatch(unProcessedTokens.Peek().Value, timeExpressionRegex))
            {
                string timeString = unProcessedTokens.Dequeue().Value;
                try
                {
                    if (timeString.EndsWith("w"))
                    {
                        timeString = timeString.TrimEnd('w');
                        time       = new LocalTime(ParseTimeString(timeString));
                        return(true);
                    }
                    if (timeString.EndsWith("s"))
                    {
                        timeString = timeString.TrimEnd('s');
                        time       = new StandardTime(ParseTimeString(timeString));
                        return(true);
                    }
                    if (timeString.EndsWith("u") || timeString.EndsWith("g") ||
                        timeString.EndsWith("z"))
                    {
                        timeString = timeString.TrimEnd('u', 'g', 'z');
                        time       = new UtcTime(ParseTimeString(timeString));
                        return(true);
                    }

                    // default is local time
                    time = new LocalTime(ParseTimeString(timeString));
                    return(true);
                }

                catch (Exception e)
                {
                    string msg = String.Format("Unable to parse {0}: {1}", typeof(TzDbTimeExpression).Name, timeString);
                    throw new Exception(msg, e);
                }
            }
            time = null;
            return(false);
        }
示例#5
0
 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();
 }
 protected TzDbAbstractDateTime(Date date, AbstractTime time)
 {
     Date = date;
     Time = time;
 }
示例#7
0
 public MeasureAttributes(bool isVisible, AbstractClef clef, AbstractKey key, AbstractTime time) : base(isVisible, clef, key, time)
 {
 }