summaryrefslogtreecommitdiffstats
path: root/src/corelib/tools/qdatetime.cpp
diff options
context:
space:
mode:
authorMitch Curtis <mitch.curtis@digia.com>2013-06-14 13:43:16 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-06-17 13:21:49 +0200
commit8a680201f155a6af3d162157efa9e4802d712280 (patch)
tree61349d21529827f308a23c58a9d9528687c7e8c5 /src/corelib/tools/qdatetime.cpp
parent08d652ca67d4fb3240e4fe2d39d6518d67ecf02d (diff)
Fix roundtrip conversion of datetimes.
QDateTime.toString() is writing out milliseconds since change 15da0a5af20fe6771bcb94ef8d46edbd5c8fb64c. Unfortunately this breaks QDateTime::fromString() with Qt::TextDate which can't handle the new format. Fix by making QDateTime::fromString split up seconds and milliseconds on a period, if any. Now QDateTime dt = ...; assert(QDateTime::fromString(dt.toString(), Qt::TextDate) == dt) works again. Change-Id: Ibfe9032e357ceaf894e33f3e33affe94f56dbf5c Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Diffstat (limited to 'src/corelib/tools/qdatetime.cpp')
-rw-r--r--src/corelib/tools/qdatetime.cpp24
1 files changed, 20 insertions, 4 deletions
diff --git a/src/corelib/tools/qdatetime.cpp b/src/corelib/tools/qdatetime.cpp
index c137049f38..0b4761d5b4 100644
--- a/src/corelib/tools/qdatetime.cpp
+++ b/src/corelib/tools/qdatetime.cpp
@@ -3409,13 +3409,29 @@ QDateTime QDateTime::fromString(const QString& s, Qt::DateFormat f)
return QDateTime();
}
- int second = (timeParts.count() > 2) ? timeParts.at(2).toInt(&ok) : 0;
- if (!ok) {
- return QDateTime();
+ int second = 0;
+ int millisecond = 0;
+ if (timeParts.count() > 2) {
+ QStringList secondParts = timeParts.at(2).split(QLatin1Char('.'));
+ if (secondParts.size() > 2) {
+ return QDateTime();
+ }
+
+ second = secondParts.first().toInt(&ok);
+ if (!ok) {
+ return QDateTime();
+ }
+
+ if (secondParts.size() > 1) {
+ millisecond = secondParts.last().toInt(&ok);
+ if (!ok) {
+ return QDateTime();
+ }
+ }
}
QDate date(year, month, day);
- QTime time(hour, minute, second);
+ QTime time(hour, minute, second, millisecond);
if (parts.count() == 5)
return QDateTime(date, time, Qt::LocalTime);