Skip to content

Commit

Permalink
Implement time stats for QgsDateTimeStatisticalSummary
Browse files Browse the repository at this point in the history
  • Loading branch information
nyalldawson committed Nov 30, 2016
1 parent 6a457c2 commit ecd876a
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 3 deletions.
14 changes: 11 additions & 3 deletions src/core/qgsdatetimestatisticalsummary.cpp
Expand Up @@ -41,6 +41,7 @@ void QgsDateTimeStatisticalSummary::reset()
mCountMissing = 0;
mMin = QDateTime();
mMax = QDateTime();
mIsTimes = false;
}

void QgsDateTimeStatisticalSummary::calculate( const QVariantList& values )
Expand All @@ -66,6 +67,13 @@ void QgsDateTimeStatisticalSummary::addValue( const QVariant& value )
testDateTime( date.isValid() ? QDateTime( date, QTime( 0, 0, 0 ) )
: QDateTime() );
}
else if ( value.type() == QVariant::Time )
{
mIsTimes = true;
QTime time = value.toTime();
testDateTime( time.isValid() ? QDateTime( QDate::fromJulianDay( 0 ), time )
: QDateTime() );
}
else //not a date
{
mCountMissing++;
Expand Down Expand Up @@ -126,11 +134,11 @@ QVariant QgsDateTimeStatisticalSummary::statistic( QgsDateTimeStatisticalSummary
case CountMissing:
return mCountMissing;
case Min:
return mMin;
return mIsTimes ? QVariant( mMin.time() ) : QVariant( mMin );
case Max:
return mMax;
return mIsTimes ? QVariant( mMax.time() ) : QVariant( mMax );
case Range:
return QVariant::fromValue( mMax - mMin );
return mIsTimes ? QVariant::fromValue( mMax.time() - mMin.time() ) : QVariant::fromValue( mMax - mMin );
case All:
return 0;
}
Expand Down
1 change: 1 addition & 0 deletions src/core/qgsdatetimestatisticalsummary.h
Expand Up @@ -154,6 +154,7 @@ class CORE_EXPORT QgsDateTimeStatisticalSummary
int mCountMissing;
QDateTime mMin;
QDateTime mMax;
bool mIsTimes;

void testDateTime( const QDateTime& dateTime );
};
Expand Down
20 changes: 20 additions & 0 deletions tests/src/python/test_qgsdatetimestatisticalsummary.py
Expand Up @@ -157,6 +157,26 @@ def testDates(self):
self.assertEqual(s.max(), QDateTime(QDate(2019, 12, 28), QTime()))
self.assertEqual(s.range(), QgsInterval(693792000))

def testTimes(self):
""" test with time values """
s = QgsDateTimeStatisticalSummary()
self.assertEqual(s.statistics(), QgsDateTimeStatisticalSummary.All)
s.calculate([QTime(11, 3, 4),
QTime(15, 3, 4),
QTime(19, 12, 28),
QTime(),
QTime(8, 1, 2),
QTime(),
QTime(19, 12, 28)])
self.assertEqual(s.count(), 7)
self.assertEqual(s.countDistinct(), 5)
self.assertEqual(s.countMissing(), 2)
self.assertEqual(s.min().time(), QTime(8, 1, 2))
self.assertEqual(s.max().time(), QTime(19, 12, 28))
self.assertEqual(s.statistic(QgsDateTimeStatisticalSummary.Min), QTime(8, 1, 2))
self.assertEqual(s.statistic(QgsDateTimeStatisticalSummary.Max), QTime(19, 12, 28))
self.assertEqual(s.range(), QgsInterval(40286))

def testMissing(self):
s = QgsDateTimeStatisticalSummary()
s.calculate([NULL,
Expand Down

0 comments on commit ecd876a

Please sign in to comment.