List Archive

Thread

Thread Index

Message

From: Andreas Falkenhahn <andreas%falkenhahn.com@localhost>
To: Thomas Klausner <tk%giga.or.at@localhost>
Subject: Re: zip_file_set_mtime() bug?
Date: Wed, 15 Nov 2017 20:57:22 +0100

On 15.11.2017 at 19:50 Thomas Klausner wrote:

> On Wed, Nov 15, 2017 at 07:17:10PM +0100, Andreas Falkenhahn wrote:
>> On 15.11.2017 at 18:39 Thomas Klausner wrote:

>> > On Wed, Nov 15, 2017 at 05:48:07PM +0100, Andreas Falkenhahn wrote:

>> >> I want to set the datestamp of a file inside a zip archive to
>> >> 16-Sep-2017 08:34:56. This is my code:

>> >>       struct tm tm;

>> >>       tm.tm_sec = 56;
>> >>       tm.tm_min = 34;
>> >>       tm.tm_hour = 8;
>> >>       tm.tm_mday = 16;
>> >>       tm.tm_mon = 8;
>> >>       tm.tm_year = 117;
>> >>       tm.tm_isdst = -1;
>> >>       
>> >>       zip_file_set_mtime(arc, 0, mktime(&tm), 0);
>> >>       
>> >> When I compile and run this code on Linux, Ubuntu shows the
>> >> file date correctly as 16-Sep-2017 08:34:56.

>> >> When I compile and run this code on Windows, however, Windows
>> >> Explorer shows the file date as 16-Sep-2017 09:34:56, i.e.
>> >> one hour later than what I passed to zip_file_set_mtime().

>> >> Is this a bug in libzip or am I doing something wrong here?

>> > libzip doesn't behave differently in this code path for the two
>> > operating systems.

>> > I'd take a closer look at what you get from mktime() on the two
>> > systems.

>> It's the same. So when I open the zip archive created on Ubuntu
>> with Windows Explorer, Explorer also reports 09:34:56 whereas Ubuntu
>> reports 08:34:56. Any idea what is the reason for that? Why
>> does Windows Explorer add an hour?

> I'm guessing that it thinks the time inside the zip archive is UTC,
> and that you're in CET (= UTC+1), so it adds one hour when displaying
> the time.

I've done some more tests and the problem seems to be caused by
daylight saving time. If I set the date to 28-Oct-2017 (= last day
with DST) 08:34:56, Windows Explorer adds an hour. If I set the date
to 29-Oct-2017 (= first day without DST) 08:34:56, Windows Explorer
won't add an hour. 

I'm not too familiar with C's time functions, so could this line
in the code I posted above be the problem?

        tm.tm_isdst = -1;

Or do you think this is a bug in Windows Explorer? (which I guess is
rather unlikely considering that correct dates are quite an important
feature....)

-- 
Best regards,
 Andreas Falkenhahn                            
mailto:andreas%falkenhahn.com@localhost

Made by MHonArc.