Beispiel #1
0
        public long parse()
        {
            _value = NULL_VALUE;
            _unit  = 0;

            while (true)
            {
                int token = nextToken();

                if (token == '-')
                {
                    token = nextToken();

                    if (token == INT)
                    {
                        _value = -_value;
                    }
                    else
                    {
                        _peekToken = token;
                        continue;
                    }
                }

                if (token < 0)
                {
                    if (_hasDate && !_hasTime)
                    {
                        _date.setTime(0, 0, 0, 0);
                    }

                    return(_date.getGMTTime());
                }
                else if (token == INT)
                {
                    int digits = _digits;
                    int value  = _value;

                    token = nextToken();

                    if (token == PERIOD)
                    {
                        parsePeriod();
                    }
                    else if (token == ':')
                    {
                        parseTime();
                        _hasTime = true;
                    }
                    else if (token == '-')
                    {
                        parseISODate(value);
                        _hasDate = true;
                    }
                    else if (token == '/')
                    {
                        parseUSDate(value);
                        _hasDate = true;
                    }
                    else if (token == MONTH)
                    {
                        parseDayMonthDate(value);
                        _hasDate = true;
                    }
                    else
                    {
                        _peekToken = token;

                        parseBareInt(value, digits);
                    }
                }
                else if (token == PERIOD)
                {
                    parsePeriod();
                }
                else if (token == WEEKDAY)
                {
                    addWeekday(_value, _weekday);
                    _value = NULL_VALUE;
                }
                else if (token == MONTH)
                {
                    parseMonthDate(_value);
                    _hasDate = true;
                }
                else if (token == '@')
                {
                    token = nextToken();

                    if (token == INT)
                    {
                        int value = _value;
                        _value = NULL_VALUE;

                        _date.setGMTTime(value * 1000L);

                        token = nextToken();
                        if (token == '.')
                        {
                            token = nextToken();

                            if (token != INT)
                            {
                                _peekToken = token;
                            }
                        }
                        else
                        {
                            _peekToken = token;
                        }
                    }
                }
            }
        }