summaryrefslogtreecommitdiffstats
path: root/src/corelib/io/qfilesystemengine_win.cpp
diff options
context:
space:
mode:
authorThiago Macieira <thiago.macieira@intel.com>2017-07-10 15:16:47 -0700
committerThiago Macieira <thiago.macieira@intel.com>2017-08-05 16:41:47 +0000
commitf77117d6ca4605917ca71135cf3166f4f02fe7d3 (patch)
treef3085512aacab5b645b47868bd8716ff9d756ed5 /src/corelib/io/qfilesystemengine_win.cpp
parenta3c71b71e2033b92c74e54fc316ea42df2344ed2 (diff)
QFileSystemEngine/Windows: fix setFileTime when input date is UTC
I was getting a weird 7-hour offset when doing: QVERIFY(file.setFileTime(before.addSecs(-10), QFile::FileModificationTime)); mtime = file.fileTime(QFile::FileModificationTime).toUTC(); QCOMPARE(mtime, before.addSecs(-10)); Change-Id: I35c4da69d754686a43e675b3d215213e448df7cf Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
Diffstat (limited to 'src/corelib/io/qfilesystemengine_win.cpp')
-rw-r--r--src/corelib/io/qfilesystemengine_win.cpp45
1 files changed, 30 insertions, 15 deletions
diff --git a/src/corelib/io/qfilesystemengine_win.cpp b/src/corelib/io/qfilesystemengine_win.cpp
index e171de9e9f..79a9936785 100644
--- a/src/corelib/io/qfilesystemengine_win.cpp
+++ b/src/corelib/io/qfilesystemengine_win.cpp
@@ -233,22 +233,37 @@ Q_CORE_EXPORT int qt_ntfs_permission_lookup = 0;
static inline bool toFileTime(const QDateTime &date, FILETIME *fileTime)
{
- SYSTEMTIME lTime;
- const QDate d = date.date();
- const QTime t = date.time();
-
- lTime.wYear = d.year();
- lTime.wMonth = d.month();
- lTime.wDay = d.day();
- lTime.wHour = t.hour();
- lTime.wMinute = t.minute();
- lTime.wSecond = t.second();
- lTime.wMilliseconds = t.msec();
- lTime.wDayOfWeek = d.dayOfWeek() % 7;
-
SYSTEMTIME sTime;
- if (!::TzSpecificLocalTimeToSystemTime(0, &lTime, &sTime))
- return false;
+ if (date.timeSpec() == Qt::LocalTime) {
+ SYSTEMTIME lTime;
+ const QDate d = date.date();
+ const QTime t = date.time();
+
+ lTime.wYear = d.year();
+ lTime.wMonth = d.month();
+ lTime.wDay = d.day();
+ lTime.wHour = t.hour();
+ lTime.wMinute = t.minute();
+ lTime.wSecond = t.second();
+ lTime.wMilliseconds = t.msec();
+ lTime.wDayOfWeek = d.dayOfWeek() % 7;
+
+ if (!::TzSpecificLocalTimeToSystemTime(0, &lTime, &sTime))
+ return false;
+ } else {
+ QDateTime utcDate = date.toUTC();
+ const QDate d = utcDate.date();
+ const QTime t = utcDate.time();
+
+ sTime.wYear = d.year();
+ sTime.wMonth = d.month();
+ sTime.wDay = d.day();
+ sTime.wHour = t.hour();
+ sTime.wMinute = t.minute();
+ sTime.wSecond = t.second();
+ sTime.wMilliseconds = t.msec();
+ sTime.wDayOfWeek = d.dayOfWeek() % 7;
+ }
return ::SystemTimeToFileTime(&sTime, fileTime);
}