27#include <QVariantList>
36 : mStatistics( stats )
55 const auto constValues = values;
56 for (
const QVariant &variant : constValues )
66 if ( value.userType() == QMetaType::Type::QDateTime )
70 else if ( value.userType() == QMetaType::Type::QDate )
72 const QDate date = value.toDate();
73 testDateTime( date.isValid() ? QDateTime( date, QTime( 0, 0, 0 ) )
76 else if ( value.userType() == QMetaType::Type::QTime )
79 const QTime time = value.toTime();
80 testDateTime( time.isValid() ? QDateTime( QDate::fromJulianDay( 0 ), time )
98void QgsDateTimeStatisticalSummary::testDateTime(
const QDateTime &dateTime,
bool isNull )
102 if ( !dateTime.isValid() || isNull )
111 if ( mMin.isValid() && dateTime.isValid() )
113 mMin = std::min( mMin, dateTime );
115 else if ( !mMin.isValid() && dateTime.isValid() )
122 if ( mMax.isValid() && dateTime.isValid() )
124 mMax = std::max( mMax, dateTime );
126 else if ( !mMax.isValid() && dateTime.isValid() )
140 return mValues.count();
142 return mCountMissing;
144 return mIsTimes ? QVariant( mMin.time() ) : QVariant( mMin );
146 return mIsTimes ? QVariant( mMax.time() ) : QVariant( mMax );
148#if QT_VERSION < QT_VERSION_CHECK(6, 4, 0)
149 return mIsTimes ? QVariant::fromValue( mMax.time() - mMin.time() ) : QVariant::fromValue( mMax - mMin );
151 return mIsTimes ? QVariant::fromValue( mMax.time() - mMin.time() ) : QVariant::fromValue(
QgsInterval(
static_cast< double >( ( mMax - mMin ).
count() ) / 1000.0 ) );
161#if QT_VERSION < QT_VERSION_CHECK(6, 4, 0)
164 return QgsInterval(
static_cast< double >( ( mMax - mMin ).
count() ) / 1000.0 );
173 return QObject::tr(
"Count" );
175 return QObject::tr(
"Count (distinct)" );
177 return QObject::tr(
"Count (missing)" );
179 return QObject::tr(
"Minimum (earliest)" );
181 return QObject::tr(
"Maximum (latest)" );
183 return QObject::tr(
"Range (interval)" );
QFlags< DateTimeStatistic > DateTimeStatistics
Statistics to be calculated for date/time values.
DateTimeStatistic
Available date/time statistics.
@ Max
Maximum (latest) datetime value.
@ Min
Minimum (earliest) datetime value.
@ Range
Interval between earliest and latest datetime value.
@ CountMissing
Number of missing (null) values.
@ CountDistinct
Number of distinct datetime values.
QVariant statistic(Qgis::DateTimeStatistic stat) const
Returns the value of a specified statistic.
QgsDateTimeStatisticalSummary(Qgis::DateTimeStatistics stats=Qgis::DateTimeStatistic::All)
Constructor for QgsDateTimeStatisticalSummary.
QgsInterval range() const
Returns the range (interval between earliest and latest non-null datetime values).
void calculate(const QVariantList &values)
Calculates summary statistics for a list of variants.
static QString displayName(Qgis::DateTimeStatistic statistic)
Returns the friendly display name for a statistic.
void addValue(const QVariant &value)
Adds a single datetime to the statistics calculation.
void finalize()
Must be called after adding all datetimes with addValue() and before retrieving any calculated dateti...
void reset()
Resets the calculated values.
int count() const
Returns the calculated count of values.
A representation of the interval between two datetime values.
static bool isNull(const QVariant &variant, bool silenceNullWarnings=false)
Returns true if the specified variant should be considered a NULL value.