Esempio n. 1
0
//
// [-]{CCYY-MM-DD}[TimeZone]
//
void TimeVal::parseDate()
{
  initParser();
  getDate();
  parseTimeZone();
  validateDateTime();
  xmlnormalize();
}
Esempio n. 2
0
void TimeVal::parseYearMonth()
{
  initParser();

  // get date
  getYearMonth();
  parser_context.fValue[Day] = DAY_DEFAULT;
  parseTimeZone();

  validateDateTime();
  xmlnormalize();
}
bool DateComponents::parseDateTime(const String& src, unsigned start, unsigned& end)
{
    unsigned index;
    if (!parseDate(src, start, index))
        return false;
    if (index >= src.length())
        return false;
    if (src[index] != 'T')
        return false;
    ++index;
    if (!parseTime(src, index, index))
        return false;
    if (!parseTimeZone(src, index, end))
        return false;
    if (!withinHTMLDateLimits(m_year, m_month, m_monthDay, m_hour, m_minute, m_second, m_millisecond))
        return false;
    m_type = DateTime;
    return true;
}
Esempio n. 4
0
QDateTime GoogleCalHandler::parseDateTime(const QString &time, const QTimeZone &destZone)
{
    QDateTime result;
    // format year-month-dayThour:min:sec... we skip the rest, assuming is part of timezone.
    QTimeZone sourceZone = parseTimeZone(time);
    int year = time.mid(0,4).toInt();
    int month = time.mid(5,2).toInt();
    int day = time.mid(8,2).toInt();
    result.setDate(QDate(year, month, day));
    if (time.length() >= 19) {
        int hour = time.mid(11,2).toInt();
        int minute = time.mid(14,2).toInt();
        int second = time.mid(17,2).toInt();
        result.setTime(QTime(hour, minute, second));
    }
    if (destZone.isValid() && sourceZone.isValid())
        return destZone.convert(result, sourceZone);
    return result;
}
Esempio n. 5
0
bool DateComponents::parseDateTime(const UChar* src, unsigned length, unsigned start, unsigned& end)
{
    ASSERT(src);
    unsigned index;
    if (!parseDate(src, length, start, index))
        return false;
    if (index >= length)
        return false;
    if (src[index] != 'T')
        return false;
    ++index;
    if (!parseTime(src, length, index, index))
        return false;
    if (!parseTimeZone(src, length, index, end))
        return false;
    if (!withinHTMLDateLimits(m_year, m_month, m_monthDay, m_hour, m_minute, m_second, m_millisecond))
        return false;
    m_type = DateTime;
    return true;
}
Esempio n. 6
0
static void getDate(uint32_t sec,struct stime* time)
{
	long JD;

	  parseTimeZone(&sec,time);

	  sec +=retPeriodofYearTime(time);

	  time->sec_1990 = sec;

	  time->sec = (uint32_t)(sec % 60);
	  sec /= 60;
	  time->min = (uint32_t)(sec % 60);
	  sec /= 60;
	  time->hour = ((uint32_t)(sec % 24));
	  sec /= 24;

	  JD = sec + JAN_1ST_1900;

	  GetGregorianDate(JD, time);
}
Esempio n. 7
0
bool GoogleCalHandler::startElement( const QString & namespaceURI, const QString & localName, const QString & qName, const QXmlAttributes & atts )
{
    Q_UNUSED(namespaceURI);
    Q_UNUSED(localName);

    // if we are in a tree we dont' recognize, ignore the lot of it.
    if (ignoreDepth) {
        ignoreDepth++;
        return true;
    }

    Element t = token(qName);
    switch(t) {
        case Entry:
            state = EntryState;
            break;
        case Feed:
            state = FeedState;
            break;
        case Category:
            if (atts.value("scheme").endsWith("#kind")
                    && atts.value("term").endsWith("#event"))
                state = EventState;
            // TODO other kinds of categories?
            break;
        case Status:
            // this is how deleted events are detected
            if (atts.value("value").endsWith("#event.canceled"))  {
                removeCurrentAppointment = true;
            }
            break;
        case Reminder:
            if (!atts.value("minutes").isEmpty()) {
                lastAppointment.setAlarm(atts.value("minutes").toInt(), QAppointment::Visible);
            } else if (!atts.value("hours").isEmpty()) {
                lastAppointment.setAlarm(atts.value("minutes").toInt()*60, QAppointment::Visible);
            }
            // TODO doesn't handle days or absolute time.
            break;
        case When:
            {
                QString st = atts.value("startTime");
                QString et = atts.value("endTime");
                if (st.isEmpty() || et.isEmpty()) {
                    ignoreDepth++;
                } else {
                    QTimeZone tz = parseTimeZone(st);
                    QDateTime start = parseDateTime(st, tz);
                    QDateTime end = parseDateTime(et, tz);
                    if (st.length() < 19)
                        lastAppointment.setAllDay(true);
                    lastAppointment.setTimeZone(tz);
                    lastAppointment.setStart(start);
                    lastAppointment.setEnd(end);
                }
            }
            break;
        case Where:
            lastAppointment.setLocation(atts.value("valueString"));
            break;
        case Title:
        case Content:
            if (atts.value("type") != "text") {
                ignoreDepth++;
            }
            break;
        case Recurrence:
        case Id:
        case Published:
        case Updated:
            if (state != EntryState && state != EventState) {
                ignoreDepth++;
                break;
            }
            break;
        case Unrecognized:
            ignoreDepth++;
    }
    return true;
}
TimeZoneService::TimeZoneResultList TimeZoneService::getTimeZoneRuleOne(const TimeZoneEntry& entry)
{
	TimeZoneResultList results;

	TzTransitionList transitionList = parseTimeZone(entry.tz.c_str());

	for (IntList::const_iterator it = entry.years.begin();
		 it != entry.years.end(); ++it) {

		int year = (*it);

		TimeZoneResult res;
		res.tz = entry.tz;
		res.year = year;
		res.hasDstChange = false;
		res.utcOffset = -1;
		res.dstOffset = -1;
		res.dstStart  = -1;
		res.dstEnd    = -1;

		// First do a scan to check if there are entries for this year
		bool hasEntriesForYear = false;
		for (TzTransitionList::const_iterator iter = transitionList.begin();
			 iter != transitionList.end(); ++iter) {

			const TzTransition& trans = (*iter);
			if (trans.year == year) {
				hasEntriesForYear = true;
				break;
			}
		}

		if (hasEntriesForYear) {
		
			for (TzTransitionList::const_iterator iter = transitionList.begin();
				 iter != transitionList.end(); ++iter) {

				const TzTransition& trans = (*iter);
				if (trans.year != year)
					continue;

				if (trans.isDst) {
					res.hasDstChange = true;
					res.dstOffset    = trans.utcOffset;
					res.dstStart     = trans.time;
				}
				else {
					res.utcOffset    = trans.utcOffset;
					res.dstEnd       = trans.time;
				}
			}
		}
		else {

			// Pick the latest year which is < the specified year
			for (TzTransitionList::const_reverse_iterator iter = transitionList.rbegin();
				 iter != transitionList.rend(); ++iter) {

				const TzTransition& trans = (*iter);
				if (trans.year > year)
					continue;

				res.hasDstChange = false;
				res.dstOffset    = -1;
				res.dstStart     = -1;
				res.dstEnd       = -1;
				res.utcOffset    = trans.utcOffset;

				break;
			}
		}

		if (res.utcOffset == -1)
			continue;
					
		if (res.dstStart == -1)
			res.dstEnd = -1;

		results.push_back(res);
	}	
	
    return results;
}