#2659 Ensemble statistics. Add time history resampler class. Extended RiaQDateTimeTools class

This commit is contained in:
Bjørn Erik Jensen
2018-06-12 11:04:36 +02:00
parent d09df6807d
commit 1137a916e0
7 changed files with 851 additions and 1 deletions

View File

@@ -21,10 +21,21 @@
#include <QString>
#include <QDateTime>
#include <cvfAssert.h>
#include <ctime>
#include <cmath>
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
const DateTimeSpan RiaQDateTimeTools::TIMESPAN_DECADE = DateTimeSpan(10, 0, 0);
const DateTimeSpan RiaQDateTimeTools::TIMESPAN_YEAR = DateTimeSpan(1, 0, 0);
const DateTimeSpan RiaQDateTimeTools::TIMESPAN_MONTH = DateTimeSpan(0, 1, 0);
const DateTimeSpan RiaQDateTimeTools::TIMESPAN_DAY = DateTimeSpan(0, 0, 1);
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
@@ -72,6 +83,16 @@ QDateTime RiaQDateTimeTools::fromYears(double years)
return RiaQDateTimeTools::addYears(dt, yearsAfterEpoch);
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
QDateTime RiaQDateTimeTools::fromTime_t(time_t t)
{
auto qdt = createUtcDateTime();
qdt.setTime_t(t);
return qdt;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
@@ -112,6 +133,25 @@ QDateTime RiaQDateTimeTools::addYears(const QDateTime& dt, double years)
return tmp;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
QDateTime RiaQDateTimeTools::addSpan(const QDateTime& dt, DateTimeSpan span)
{
return createUtcDateTime(dt)
.addYears(span.years())
.addMonths(span.months())
.addDays(span.days());
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
QDateTime RiaQDateTimeTools::addPeriod(const QDateTime& dt, DateTimePeriod period)
{
return addSpan(dt, timeSpan(period));
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
@@ -155,3 +195,90 @@ QDateTime RiaQDateTimeTools::createUtcDateTime(const QDate& date, const QTime& t
auto qdt = QDateTime(date, time, currentTimeSpec());
return qdt;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
QDateTime RiaQDateTimeTools::createUtcDateTime(const QDateTime& dt)
{
auto qdt = QDateTime(dt);
qdt.setTimeSpec(currentTimeSpec());
return qdt;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool RiaQDateTimeTools::equalTo(const QDateTime& dt1, const QDateTime& dt2)
{
return dt1.secsTo(dt2) == 0;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool RiaQDateTimeTools::lessThan(const QDateTime& dt1, const QDateTime& dt2)
{
// dt1 < dt2
auto i = dt1.secsTo(dt2);
return dt1.secsTo(dt2) > 0;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool RiaQDateTimeTools::lessThanOrEqualTo(const QDateTime& dt1, const QDateTime& dt2)
{
// dt1 <= dt2
return dt1.secsTo(dt2) >= 0;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool RiaQDateTimeTools::biggerThan(const QDateTime& dt1, const QDateTime& dt2)
{
// dt1 > dt2
return dt1.secsTo(dt2) < 0;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool RiaQDateTimeTools::biggerThanOrEqualTo(const QDateTime& dt1, const QDateTime& dt2)
{
// dt1 >= dt2
return dt1.secsTo(dt2) <= 0;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
const DateTimeSpan RiaQDateTimeTools::timeSpan(DateTimePeriod period)
{
switch (period)
{
case DateTimePeriod::DECADE: return TIMESPAN_DECADE;
case DateTimePeriod::YEAR: return TIMESPAN_YEAR;
case DateTimePeriod::MONTH: return TIMESPAN_MONTH;
case DateTimePeriod::DAY: return TIMESPAN_DAY;
}
CVF_ASSERT(false);
return DateTimeSpan();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
QDateTime RiaQDateTimeTools::truncateTime(const QDateTime& dt, DateTimePeriod period)
{
switch (period)
{
case DateTimePeriod::DECADE: return createUtcDateTime(QDate((dt.date().year() / 10) * 10, 1, 1));
case DateTimePeriod::YEAR: return createUtcDateTime(QDate(dt.date().year(), 1, 1));
case DateTimePeriod::MONTH: return createUtcDateTime(QDate(dt.date().year(), dt.date().month(), 1));
case DateTimePeriod::DAY: return createUtcDateTime(QDate(dt.date().year(), dt.date().month(), dt.date().day()));
}
CVF_ASSERT(false);
return createUtcDateTime();
}