bool DateInterval::setInterval(const String& date_interval) { timelib_rel_time *di = nullptr; timelib_error_container *errors = nullptr; #ifdef TIMELIB_HAVE_INTERVAL timelib_time *start = nullptr, *end = nullptr; int r = 0; timelib_strtointerval((char*)date_interval.data(), date_interval.size(), &start, &end, &di, &r, &errors); #else throw_not_implemented("timelib too old"); #endif int error_count = errors->error_count; DateTime::setLastErrors(errors); if (error_count > 0) { timelib_rel_time_dtor(di); return false; } else { #ifdef TIMELIB_HAVE_INTERVAL if (UNLIKELY(!di && start && end)) { timelib_update_ts(start, nullptr); timelib_update_ts(end, nullptr); di = timelib_diff(start, end); } #endif m_di = DateIntervalPtr(di, dateinterval_deleter()); return true; } }
bool DateInterval::setDateString(CStrRef date_string) { timelib_time *time; timelib_rel_time *di; timelib_error_container *errors = NULL; time = timelib_strtotime((char*)date_string.data(), date_string.size(), &errors, TimeZone::GetDatabase()); int error_count = errors->error_count; DateTime::setLastErrors(errors); if (error_count > 0) { timelib_time_dtor(time); return false; } else { di = timelib_rel_time_clone(&(time->relative)); timelib_time_dtor(time); m_di = DateIntervalPtr(di, dateinterval_deleter()); return true; } }
bool DateInterval::setInterval(CStrRef date_interval) { timelib_rel_time *di = NULL; timelib_error_container *errors = NULL; #ifdef TIMELIB_HAVE_INTERVAL timelib_time *start = NULL, *end = NULL; int r = 0; timelib_strtointerval((char*)date_interval.data(), date_interval.size(), &start, &end, &di, &r, &errors); #else throw NotImplementedException("timelib too old"); #endif int error_count = errors->error_count; DateTime::setLastErrors(errors); if (error_count > 0) { timelib_rel_time_dtor(di); return false; } else { m_di = DateIntervalPtr(di, dateinterval_deleter()); return true; } }
DateInterval::DateInterval(timelib_rel_time *di) { m_di = DateIntervalPtr(di, dateinterval_deleter()); }