bin/53899: mktime gives wrong result in Central timezone
Nick Triantos
nick at triantos.com
Sun Jun 29 23:50:22 PDT 2003
The following reply was made to PR bin/53899; it has been noted by GNATS.
From: "Nick Triantos" <nick at triantos.com>
To: "'Barry Pederson'" <bp at barryp.org>,
<FreeBSD-gnats-submit at FreeBSD.org>
Cc:
Subject: RE: bin/53899: mktime gives wrong result in Central timezone
Date: Sun, 29 Jun 2003 23:47:39 -0700
I found out the hard way that this is apparently not a bug, but a
feature. On *BSD systems, for some weird reason, mktime() does not call
localtime(). I had submitted a patch to fix this, but it got removed
because there are apparently some applications that depend on this
unusual behaviour.
To work around the problem, call localtime() manually.
-Nick
-----Original Message-----
From: owner-freebsd-bugs at freebsd.org
[mailto:owner-freebsd-bugs at freebsd.org] On Behalf Of Barry at FreeBSD.org
Sent: Sunday, June 29, 2003 10:06 AM
To: FreeBSD-gnats-submit at FreeBSD.org
Subject: bin/53899: mktime gives wrong result in Central timezone
>Number: 53899
>Category: bin
>Synopsis: mktime gives wrong result in Central timezone
>Confidential: no
>Severity: non-critical
>Priority: medium
>Responsible: freebsd-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: sw-bug
>Submitter-Id: current-users
>Arrival-Date: Sun Jun 29 10:10:08 PDT 2003
>Closed-Date:
>Last-Modified:
>Originator: Barry Pederson
>Release: FreeBSD 4.8-RELEASE i386
>Organization:
>Environment:
System: FreeBSD eden.barryp.org 4.8-RELEASE FreeBSD 4.8-RELEASE #0: Sat
Apr 5 12:35:50 CST 2003
barryp at eden.barryp.org:/usr/obj/usr/src/sys/BARRYP i386
>Description:
The mktime function seems to give an incorrect result when the
timezone
is set to US Central time. I first noticed this when running
Zope3 (Python)
unittests, but can also demonstrate the problem using Perl.
>How-To-Repeat:
Execute mktime() with the same parameters, but vary the TZ
enviroment
variable. Here is a shell script and a perl script to
demonstrate:
------ tzdemo.sh -----------
#!/bin/sh
for tz in 'EST5EDT' 'CST6CDT' 'MST7MDT' 'PST8PDT'
do
export TZ=$tz;
/usr/bin/env perl tzdemo.pl $tz
done
----------------------------
------ tzdemo.pl -----------
#!/usr/bin/env perl
use POSIX;
# An arbitrary unix timestamp and its
# gmtime() equivalent.
#
$test_time = 1055176982;
@test_gm = (2, 43, 16, 9, 5, 103, 1, 159, 0);
# You could also say:
#
# @test_gm = gmtime($test_time);
# Convert test time back to a unix timestamp, but since
# mktime() assumes localtime, the result should vary
# according to the current timezone setting
#
$result = mktime(@test_gm);
# Calculate the difference, in hours, between what mktime()
# came up with for a local value and the initial GMT time
# we started with.
#
$diff = ($result - $test_time) / 3600;
print "$ARGV[0] $result $diff\n";
----------------------------
The expected output is:
EST5EDT 1055194982 5
CST6CDT 1055198582 6
MST7MDT 1055202182 7
PST8PDT 1055205782 8
The actual output I get is:
EST5EDT 1055194982 5
CST6CDT 1055194982 5
MST7MDT 1055202182 7
PST8PDT 1055205782 8
The second line (CST6CDT) should not have the same numbers.
>Fix:
>Release-Note:
>Audit-Trail:
>Unformatted:
_______________________________________________
freebsd-bugs at freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-bugs
To unsubscribe, send any mail to "freebsd-bugs-unsubscribe at freebsd.org"
More information about the freebsd-bugs
mailing list