[Interest] Relashionship between time_t and QDateTime

Constantin Makshin cmakshin at gmail.com
Tue Aug 27 19:40:29 CEST 2013


When converting time from UTC to local time, Windows uses the *current*
state of daylight saving, not one that was active at the time the
original timestamp is "pointing" to.

On 08/27/2013 01:55 PM, Frank Hemer wrote:
> On Tuesday 27 August 2013 10:19:06 Calogero Mauceri wrote:
>> On 8/26/2013 7:30 PM, Thiago Macieira wrote:
>>> On segunda-feira, 26 de agosto de 2013 17:42:58, Calogero Mauceri wrote:
>>>> QDateTime myDateTime = QDateTime::fromTime_t(f_mtime);
>>>>
>>>> The date time printed doing a myDateTime.toString() is
>>>>
>>>>       Wed Dec 5 12:36:18 2007
>>>>
>>>> Retrieving the last modified information using QFileInfo, the result is
>>>> different
>>>>
>>>>       QFileInfo fi(filepath);
>>>>       QDateTime myDateTime = fi.lastModified();
>>>>
>>>> I get this result
>>>>
>>>>       Wed Dec 5 11:36:18 2007
>>>>
>>>> That is there is one hour difference. I guess the difference is due to
>>>> the daylight saving management,
>>>> but I can not understand how that management is performed.
>>>>
>>>> Note: if I look at the file properties on Windows dialog, the last
>>>> modified time is shown as
>>>>
>>>>       Wed Dec 5 12:36:18 2007
>>>
>>> Ah, Windows...
>>>
>>> The problem might be simply a matter of timezones. The timestamps on files
>>> on Windows are not stored with time_t, but with some Windows-specific
>>> data. We get a FILETIME back from Win32.
>>>
>>> Anyway, up until Qt 5.2, you cannot trust the output of a QDateTime with
>>> qDebug since it does not include the timezone. You have to ensure that the
>>>
>>> dates you're comparing by text are in the same timezone:
>>> 	qDebug() << dt.toUTC();
>>
>> Thanks for your reply.
>>
>> Unfortunately the problem is still there even if I force a toUTC()
>> conversion for both QDateTime, either the one initialized from time_t or
>> the one returned by QFileInfo :/.
>> Similarly
>>
>> 	QDateTime dtFromTime_t = QDateTime::fromTime_t(mtime).toUTC();
>> 	QDateTime dtFromFileInfo = fi.lastModified().toUTC();
>> 	int sec = ABS(dtFromTime.secsTo(dtFromFileInfo));	// sec returned is 3600
> 
> Daylight savings handling in windows is somehow 'weird'.
> The timestamps of files change when switching the system time from summer time 
> to winter time and vice versa.
> 
> Frank

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 836 bytes
Desc: OpenPGP digital signature
URL: <http://lists.qt-project.org/pipermail/interest/attachments/20130827/bcbaf1e4/attachment.sig>


More information about the Interest mailing list