Make QTime::toString output milliseconds for Qt::TextDate, Qt::ISODate.
Section 4.2.2.4 of ISO 8601 allows for decimal fraction representations of dates and times. Currently, when calling QDateTime::toString(Qt::TextDate) or QDateTime::toString(Qt::ISODate), the milliseconds will be omitted. However, QDateTime::fromString(str, Qt::TextDate) and QDateTime::fromString(str, Qt::ISODate) already support decimal fraction representations, so this patch just adds this support to QTime::toString, and hence QDateTime::toString(). Task-number: QTBUG-30250 Change-Id: If58e4b3d3105322c51d11a76b832e5e634d8991f Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
This commit is contained in:
parent
96cd00bc0f
commit
15da0a5af2
7
dist/changes-5.2.0
vendored
7
dist/changes-5.2.0
vendored
@ -31,3 +31,10 @@ QtWidgets
|
||||
introduced to control how precise the autoResize should be.
|
||||
|
||||
- QFileDialog::setDefaultSuffix() removes leading dot characters.
|
||||
|
||||
QtCore
|
||||
------
|
||||
- [QTBUG-30250] QTime, QDateTime:
|
||||
When calling QTime::toString(Qt::TextDate) and QTime::toString(Qt::ISODate),
|
||||
milliseconds are now included in the returned string. This also applies to
|
||||
QDateTime::toString(Qt::TextDate) and QDateTime::toString(ISODate).
|
||||
|
@ -1474,15 +1474,15 @@ int QTime::msec() const
|
||||
/*!
|
||||
\overload
|
||||
|
||||
Returns the time as a string. Milliseconds are not included. The
|
||||
\a format parameter determines the format of the string.
|
||||
Returns the time as a string. The \a format parameter determines
|
||||
the format of the string.
|
||||
|
||||
If \a format is Qt::TextDate, the string format is HH:MM:SS; e.g. 1
|
||||
second before midnight would be "23:59:59".
|
||||
If \a format is Qt::TextDate, the string format is HH:MM:SS.zzz;
|
||||
e.g. 1 second before midnight would be "23:59:59.000".
|
||||
|
||||
If \a format is Qt::ISODate, the string format corresponds to the
|
||||
ISO 8601 extended specification for representations of dates,
|
||||
which is also HH:MM:SS.
|
||||
ISO 8601 extended specification (with decimal fractions) for
|
||||
representations of dates; also HH:MM:SS.zzz.
|
||||
|
||||
If the \a format is Qt::SystemLocaleShortDate or
|
||||
Qt::SystemLocaleLongDate, the string format depends on the locale
|
||||
@ -1521,10 +1521,11 @@ QString QTime::toString(Qt::DateFormat format) const
|
||||
default:
|
||||
case Qt::ISODate:
|
||||
case Qt::TextDate:
|
||||
return QString::fromLatin1("%1:%2:%3")
|
||||
return QString::fromLatin1("%1:%2:%3.%4")
|
||||
.arg(hour(), 2, 10, QLatin1Char('0'))
|
||||
.arg(minute(), 2, 10, QLatin1Char('0'))
|
||||
.arg(second(), 2, 10, QLatin1Char('0'));
|
||||
.arg(second(), 2, 10, QLatin1Char('0'))
|
||||
.arg(msec(), 3, 10, QLatin1Char('0'));
|
||||
}
|
||||
}
|
||||
|
||||
@ -2465,15 +2466,15 @@ void QDateTime::setTime_t(uint secsSince1Jan1970UTC)
|
||||
the default way. QDate::shortDayName(), QDate::shortMonthName(),
|
||||
and QTime::toString() are used to generate the string, so the
|
||||
day and month names will be localized names. An example of this
|
||||
formatting is "Wed May 20 03:40:13 1998".
|
||||
formatting is "Wed May 20 03:40:13.456 1998".
|
||||
|
||||
If the \a format is Qt::ISODate, the string format corresponds
|
||||
to the ISO 8601 extended specification for representations of
|
||||
dates and times, taking the form YYYY-MM-DDTHH:MM:SS[Z|[+|-]HH:MM],
|
||||
depending on the timeSpec() of the QDateTime. If the timeSpec()
|
||||
is Qt::UTC, Z will be appended to the string; if the timeSpec() is
|
||||
Qt::OffsetFromUTC, the offset in hours and minutes from UTC will
|
||||
be appended to the string.
|
||||
to the ISO 8601 extended specification (with decimal fractions) for
|
||||
representations of dates and times, taking the form
|
||||
YYYY-MM-DDTHH:MM:SS.zzz[Z|[+|-]HH:MM], depending on the timeSpec()
|
||||
of the QDateTime. If the timeSpec() is Qt::UTC, Z will be appended
|
||||
to the string; if the timeSpec() is Qt::OffsetFromUTC, the offset
|
||||
in hours and minutes from UTC will be appended to the string.
|
||||
|
||||
If the \a format is Qt::SystemLocaleShortDate or
|
||||
Qt::SystemLocaleLongDate, the string format depends on the locale
|
||||
|
@ -952,8 +952,8 @@ void tst_QVariant::toString_data()
|
||||
QTest::newRow( "float" ) << QVariant( 123.456f ) << QString( "123.456" );
|
||||
QTest::newRow( "bool" ) << QVariant( true ) << QString( "true" );
|
||||
QTest::newRow( "qdate" ) << QVariant( QDate( 2002, 1, 1 ) ) << QString( "2002-01-01" );
|
||||
QTest::newRow( "qtime" ) << QVariant( QTime( 12, 34, 56 ) ) << QString( "12:34:56" );
|
||||
QTest::newRow( "qdatetime" ) << QVariant( QDateTime( QDate( 2002, 1, 1 ), QTime( 12, 34, 56 ) ) ) << QString( "2002-01-01T12:34:56" );
|
||||
QTest::newRow( "qtime" ) << QVariant( QTime( 12, 34, 56 ) ) << QString( "12:34:56.000" );
|
||||
QTest::newRow( "qdatetime" ) << QVariant( QDateTime( QDate( 2002, 1, 1 ), QTime( 12, 34, 56 ) ) ) << QString( "2002-01-01T12:34:56.000" );
|
||||
QTest::newRow( "llong" ) << QVariant( (qlonglong)Q_INT64_C(123456789012) ) <<
|
||||
QString( "123456789012" );
|
||||
}
|
||||
|
@ -556,22 +556,25 @@ void tst_QDateTime::toString_isoDate_data()
|
||||
|
||||
QTest::newRow("localtime")
|
||||
<< QDateTime(QDate(1978, 11, 9), QTime(13, 28, 34))
|
||||
<< QString("1978-11-09T13:28:34");
|
||||
<< QString("1978-11-09T13:28:34.000");
|
||||
QTest::newRow("UTC")
|
||||
<< QDateTime(QDate(1978, 11, 9), QTime(13, 28, 34), Qt::UTC)
|
||||
<< QString("1978-11-09T13:28:34Z");
|
||||
<< QString("1978-11-09T13:28:34.000Z");
|
||||
QDateTime dt(QDate(1978, 11, 9), QTime(13, 28, 34));
|
||||
dt.setUtcOffset(19800);
|
||||
QTest::newRow("positive OffsetFromUTC")
|
||||
<< dt
|
||||
<< QString("1978-11-09T13:28:34+05:30");
|
||||
<< QString("1978-11-09T13:28:34.000+05:30");
|
||||
dt.setUtcOffset(-7200);
|
||||
QTest::newRow("negative OffsetFromUTC")
|
||||
<< dt
|
||||
<< QString("1978-11-09T13:28:34-02:00");
|
||||
<< QString("1978-11-09T13:28:34.000-02:00");
|
||||
QTest::newRow("invalid")
|
||||
<< QDateTime(QDate(-1, 11, 9), QTime(13, 28, 34), Qt::UTC)
|
||||
<< QString();
|
||||
QTest::newRow("999 milliseconds UTC")
|
||||
<< QDateTime(QDate(2000, 1, 1), QTime(13, 28, 34, 999), Qt::UTC)
|
||||
<< QString("2000-01-01T13:28:34.999Z");
|
||||
}
|
||||
|
||||
void tst_QDateTime::toString_isoDate()
|
||||
@ -591,7 +594,7 @@ void tst_QDateTime::toString_enumformat()
|
||||
QVERIFY(!str1.isEmpty()); // It's locale dependent everywhere
|
||||
|
||||
QString str2 = dt1.toString(Qt::ISODate);
|
||||
QCOMPARE(str2, QString("1995-05-20T12:34:56"));
|
||||
QCOMPARE(str2, QString("1995-05-20T12:34:56.000"));
|
||||
|
||||
QString str3 = dt1.toString(Qt::LocalDate);
|
||||
QVERIFY(!str3.isEmpty());
|
||||
|
@ -614,25 +614,27 @@ void tst_QTime::fromStringDateFormat()
|
||||
|
||||
void tst_QTime::toStringDateFormat_data()
|
||||
{
|
||||
// Since we can't define an element of Qt::DateFormat, str1 will be the string
|
||||
// in TextDate format, and str2 will be the time in ISODate format.
|
||||
QTest::addColumn<QTime>("time");
|
||||
QTest::addColumn<Qt::DateFormat>("format");
|
||||
QTest::addColumn<QString>("expected");
|
||||
|
||||
QTest::addColumn<QTime>("t");
|
||||
QTest::addColumn<QString>("str1");
|
||||
QTest::addColumn<QString>("str2");
|
||||
|
||||
QTest::newRow( "data0" ) << QTime(0,0,0,0) << QString("00:00:00") << QString("00:00:00");
|
||||
QTest::newRow( "data1" ) << QTime(10,12,34,0) << QString("10:12:34") << QString("10:12:34");
|
||||
QTest::newRow("00:00:00.000") << QTime(0, 0, 0, 0) << Qt::TextDate << QString("00:00:00.000");
|
||||
QTest::newRow("ISO 00:00:00.000") << QTime(0, 0, 0, 0) << Qt::ISODate << QString("00:00:00.000");
|
||||
QTest::newRow("Text 10:12:34.000") << QTime(10, 12, 34, 0) << Qt::TextDate << QString("10:12:34.000");
|
||||
QTest::newRow("ISO 10:12:34.000") << QTime(10, 12, 34, 0) << Qt::ISODate << QString("10:12:34.000");
|
||||
QTest::newRow("Text 10:12:34.001") << QTime(10, 12, 34, 001) << Qt::TextDate << QString("10:12:34.001");
|
||||
QTest::newRow("ISO 10:12:34.001") << QTime(10, 12, 34, 001) << Qt::ISODate << QString("10:12:34.001");
|
||||
QTest::newRow("Text 10:12:34.999") << QTime(10, 12, 34, 999) << Qt::TextDate << QString("10:12:34.999");
|
||||
QTest::newRow("ISO 10:12:34.999") << QTime(10, 12, 34, 999) << Qt::ISODate << QString("10:12:34.999");
|
||||
}
|
||||
|
||||
void tst_QTime::toStringDateFormat()
|
||||
{
|
||||
QFETCH( QTime, t );
|
||||
QFETCH( QString, str1 );
|
||||
QFETCH( QString, str2 );
|
||||
QFETCH(QTime, time);
|
||||
QFETCH(Qt::DateFormat, format);
|
||||
QFETCH(QString, expected);
|
||||
|
||||
QCOMPARE( str1, t.toString( Qt::TextDate ) );
|
||||
QCOMPARE( str2, t.toString( Qt::ISODate ) );
|
||||
QCOMPARE(time.toString(format), expected);
|
||||
}
|
||||
|
||||
void tst_QTime::toStringFormat_data()
|
||||
|
Loading…
Reference in New Issue
Block a user