// // [-]{CCYY-MM-DD}[TimeZone] // void TimeVal::parseDate() { initParser(); getDate(); parseTimeZone(); validateDateTime(); xmlnormalize(); }
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; }
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; }
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; }
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); }
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; }