Esempio n. 1
0
        /**
         * Parse date part and return index to next token (for time)
         * <ul>
         *  <li>MMM DD, YYYY	- Jan 31, 2011</li>
         * </ul>
         */
        private int ParseDateMMMDDYYYY(string sdate, ref DateInfo info, List <DateToken> tokens)
        {
            info.DayOfMonth = ToNumeric(sdate, tokens[2]);

            // locate year
            for (int i = 3; i < tokens.Count; i++)
            {
                DateToken token = tokens[i];
                switch (token.Type)
                {
                case DateToken.TType.NUMERIC:
                    info.Year = ToYear((int)token);
                    return(i + 1);

                case DateToken.TType.COMMA:
                case DateToken.TType.DASH:
                case DateToken.TType.WHITESPACE:
                case DateToken.TType.SLASH:
                    break;

                default:
                    throw new ArgumentException("failed to parse date, invalid date format: " + sdate);
                }
            }

            throw new ArgumentException("failed to parse date, invalid date format: " + sdate);
        }
Esempio n. 2
0
 /**
  * Normalize year
  */
 private int ToYear(string sdate, DateToken tok)
 {
     if (tok.Type != DateToken.TType.NUMERIC)
     {
         throw new ArgumentException("failed to parse date, as unknown form: " + sdate);
     }
     else
     {
         return(ToYear((int)tok));
     }
 }
Esempio n. 3
0
        /**
         * Parse date part and return index to next token (for time)
         * <ul>
         *  <li>YYYYMMDD		- ie 20080401</li>
         *  <li>dd-MMM-YY		- ie 23-Dec-07</li>
         *  <li>dd-MMM-YYYY		- ie 23-Dec-2007</li>
         *  <li>YYYY-MM-dd		- ie 2007-11-03</li>
         *  <li>MM/dd/YY		- ie 12/01/07</li>
         *  <li>MM/dd/YYYY		- ie 12/01/2007</li>
         *  <li>dd/MM/YY		- ie 01/12/07  (british)</li>
         *  <li>dd/MM/YYYY		- ie 01/12/2007 (british)</li>
         * </ul>
         */
        private int ParseDateNN(string sdate, ref DateInfo info, List <DateToken> tokens)
        {
            var len = tokens.Count;

            int       Inow = 0;
            DateToken T1   = tokens[0];

            // YYYYMMDD case
            if (len == 1)
            {
                int yyyymmdd = (int)T1;
                info.Year       = Bound(sdate, yyyymmdd / 10000, 1950, 9999);
                info.Month      = Bound(sdate, (yyyymmdd / 100) % 100, 1, 12);
                info.DayOfMonth = Bound(sdate, yyyymmdd % 100, 1, 31);
                return(1);
            }

            DateToken T2 = tokens[Inow = SkipSeparator(tokens, Inow + 1)];
            DateToken T3 = tokens[Inow = SkipSeparator(tokens, Inow + 1)];

            // dd-MMM-yy case
            if (T2.Type == DateToken.TType.ALPHA)
            {
                info.Month      = ToMonthOrDay((string)T2);
                info.DayOfMonth = Bound(sdate, ToNumeric(sdate, T1), 1, 31);
                info.Year       = ToYear(sdate, T3);
                return(Inow + 1);
            }

            //  yyyy-mm-dd case
            else if ((int)T1 > 1000)
            {
                info.Year       = ToYear(sdate, T1);
                info.Month      = Bound(sdate, ToNumeric(sdate, T2), 1, 12);
                info.DayOfMonth = Bound(sdate, ToNumeric(sdate, T3), 1, 31);
                return(Inow + 1);
            }
            // mm/dd/yy case
            else if (_convention == Convention.American)
            {
                info.DayOfMonth = Bound(sdate, ToNumeric(sdate, T2), 1, 31);
                info.Month      = Bound(sdate, ToNumeric(sdate, T1), 1, 12);
                info.Year       = ToYear(sdate, T3);
                return(Inow + 1);
            }
            // dd/mm/yy case
            else
            {
                info.DayOfMonth = Bound(sdate, ToNumeric(sdate, T1), 1, 31);
                info.Month      = Bound(sdate, ToNumeric(sdate, T2), 1, 12);
                info.Year       = ToYear(sdate, T3);
                return(Inow + 1);
            }
        }
Esempio n. 4
0
        /**
         * Determine timezone for this date
         */
        private ZTimeZone GetTimezone(DateToken tok)
        {
            switch (tok.Type)
            {
            case DateToken.TType.Z:
                return(ZTimeZone.GMT);

            case DateToken.TType.ALPHA:
                return(new ZTimeZone((string)tok));

            default:
                return(default(ZTimeZone));
            }
        }
Esempio n. 5
0
        /**
         * Parse date part and return index to next token (for time)
         * <ul>
         *  <li>DAY, dd MMM YYYY	- ie Fri, 25 Jul 2008 10:38:41 GMT</li>
         * </ul>
         */
        private int ParseDateHTTP(string sdate, ref DateInfo info, List <DateToken> tokens)
        {
            int       Inow = 0;
            DateToken T2   = tokens[Inow = SkipSeparator(tokens, Inow + 1)];
            DateToken T3   = tokens[Inow = SkipSeparator(tokens, Inow + 1)];
            DateToken T4   = tokens[Inow = SkipSeparator(tokens, Inow + 1)];

            // dd-MMM-yy case
            if (T3.Type == DateToken.TType.ALPHA)
            {
                info.Month      = ToMonthOrDay((string)T3);
                info.DayOfMonth = Bound(sdate, ToNumeric(sdate, T2), 1, 31);
                info.Year       = ToYear(sdate, T4);
                return(Inow + 1);
            }
            else
            {
                info.Month      = Bound(sdate, ToNumeric(sdate, T3), 1, 12);
                info.DayOfMonth = Bound(sdate, ToNumeric(sdate, T2), 1, 31);
                info.Year       = ToYear(sdate, T4);
                return(Inow + 1);
            }
        }
Esempio n. 6
0
        /**
         * Parse date part and return index to next token (for time)
         * <ul>
         *  <li>HH:mm:ss		- ie 23:10:00</li>
         *  <li>HH:mm:ss:SSS	- ie 23:10:00:100</li>
         *  <li>HH:mm:ss.SSS	- ie 23:10:00:100</li>
         * </ul>
         * Each of these formats can have a Z (for GMT) or timezone (EST) at the end of the
         * time string.
         */
        private void ParseTime(string sdate, ref DateInfo info, List <DateToken> tokens, int Istart)
        {
            var len = tokens.Count;

            if (Istart == len)
            {
                return;
            }

            DateToken separator = tokens[Istart];
            DateToken last      = tokens[len - 1];
            DateToken plast     = tokens[len - 2];

            if (separator.Type != DateToken.TType.WHITESPACE && separator.Type != DateToken.TType.T)
            {
                throw new ArgumentException("failed to parse date, as unknown time form: " + sdate);
            }


            int cap = 0;

            if (last.Type == DateToken.TType.NUMERIC)
            {
                cap = len;
            }
            else if (plast.Type == DateToken.TType.NUMERIC)
            {
                cap = len - 1;
            }
            else
            {
                cap = len - 2;
            }

            int Inow = Istart + 1;

            // get hours
            if (Inow < cap)
            {
                info.Hours = Bound(sdate, ToNumeric(sdate, tokens[Inow]), 0, 23);
            }

            // get minutes
            Inow = SkipSeparator(tokens, Inow + 1);
            if (Inow < cap)
            {
                info.Minutes = Bound(sdate, ToNumeric(sdate, tokens[Inow]), 0, 59);
            }

            // get seconds
            Inow = SkipSeparator(tokens, Inow + 1);
            if (Inow < cap)
            {
                info.Seconds = Bound(sdate, ToNumeric(sdate, tokens[Inow]), 0, 59);
            }

            // get milli seconds
            Inow = SkipSeparator(tokens, Inow + 1);
            if (Inow < cap)
            {
                var fraction = Bound(sdate, ToNumeric(sdate, tokens [Inow]), 0, 999999999);
                if (fraction <= 999)
                {
                    info.Milliseconds = fraction;
                }
                else if (fraction <= 999999)
                {
                    info.Milliseconds = fraction / 1000;
                }
                else
                {
                    info.Milliseconds = fraction / 1000000;
                }
            }
            // get timezone
            info.Zone = GetTimezone(last);
        }