Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

POSIX::strftime affects the behavior of localtime #8208

Closed
p5pRT opened this issue Nov 15, 2005 · 5 comments
Closed

POSIX::strftime affects the behavior of localtime #8208

p5pRT opened this issue Nov 15, 2005 · 5 comments

Comments

@p5pRT
Copy link

p5pRT commented Nov 15, 2005

Migrated from rt.perl.org#37678 (status was 'resolved')

Searchable as RT37678$

@p5pRT
Copy link
Author

p5pRT commented Nov 15, 2005

From ray_chiang@qicsys.com

Created by 2005.8723001@nctu.edu.tw

My system is a newly installed Debian 3.1 sarge
with perl-base_5.8.7-7_i386.deb installed.

The test program​:
#!/usr/bin/perl -w
use strict;

use POSIX qw(strftime);
my $time = 1131624000;

$ENV{TZ} = 'UTC+0';
strftime('%Y/%m/%d %H​:%M​:%S', 0, 0, 0, 10, 10, 105);
print scalar(localtime $time), "\n";
# Thu Nov 10 12​:00​:00 2005

$ENV{TZ} = 'UTC+1';
print scalar(localtime $time), "\n";
# Thu Nov 10 12​:00​:00 2005
# this should be "Thu Nov 10 11​:00​:00 2005"

strftime('%Y/%m/%d %H​:%M​:%S', 0, 0, 0, 10, 10, 105);
print scalar(localtime $time), "\n";
# Thu Nov 10 11​:00​:00 2005

Perl Info
Flags:
    category=core
    severity=high

Site configuration information for perl v5.8.7:

Configured by Debian Project at Mon Oct 17 16:05:46 UTC 2005.

Summary of my perl5 (revision 5 version 8 subversion 7) configuration:
  Platform:
    osname=linux, osvers=2.6.14-rc4, archname=i486-linux-gnu-thread-multi
    uname='linux ninsei 2.6.14-rc4 #1 smp preempt tue oct 11 20:35:48 pdt 2005 i686 gnulinux '
    config_args='-Dusethreads -Duselargefiles -Dccflags=-DDEBIAN -Dcccdlflags=-fPIC -Darchname=i486-linux-gnu -Dprefix=/usr -Dprivlib=/usr/share/perl/5.8 -Darchlib=/usr/lib/perl/5.8 -Dvendorprefix=/usr -Dvendorlib=/usr/share/perl5 -Dvendorarch=/usr/lib/perl5 -Dsiteprefix=/usr/local -Dsitelib=/usr/local/share/perl/5.8.7 -Dsitearch=/usr/local/lib/perl/5.8.7 -Dman1dir=/usr/share/man/man1 -Dman3dir=/usr/share/man/man3 -Dsiteman1dir=/usr/local/man/man1 -Dsiteman3dir=/usr/local/man/man3 -Dman1ext=1 -Dman3ext=3perl -Dpager=/usr/bin/sensible-pager -Uafs -Ud_csh-Uusesfio -Uusenm -Duseshrplib -Dlibperl=libperl.so.5.8.7 -Dd_dosuid -des'
    hint=recommended, useposix=true, d_sigaction=define
    usethreads=define use5005threads=undef useithreads=define usemultiplicity=define
    useperlio=define d_sfio=undef uselargefiles=define usesocks=undef
    usemymalloc=n, bincompat5005=undef
  Compiler:
    cc='cc', ccflags ='-D_REENTRANT -D_GNU_SOURCE -DTHREADS_HAVE_PIDS -DDEBIAN -fno-strict-aliasing -pipe -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64',
    optimize='-O2',
    cppflags='-D_REENTRANT -D_GNU_SOURCE -DTHREADS_HAVE_PIDS -DDEBIAN -fno-strict-aliasing -pipe -I/usr/local/include'
    ccversion='', gccversion='4.0.2 (Debian 4.0.2-2)', gccosandvers=''
    intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=1234
    d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=12
    ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8
    alignbytes=4, prototype=define
  Linker and Libraries:
    ld='cc', ldflags =' -L/usr/local/lib'
    libpth=/usr/local/lib /lib /usr/lib
    libs=-lgdbm -lgdbm_compat -ldb -ldl -lm -lpthread -lc -lcrypt
    perllibs=-ldl -lm -lpthread -lc -lcrypt
    libc=/lib/libc-2.3.5.so, so=so, useshrplib=true, libperl=libperl.so.5.8.7
    gnulibc_version='2.3.5'
  Dynamic Linking:
    dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E'
    cccdlflags='-fPIC', lddlflags='-shared -L/usr/local/lib'

Locally applied patches:



@INC for perl v5.8.7:
    /etc/perl
    /usr/local/lib/perl/5.8.7
    /usr/local/share/perl/5.8.7
    /usr/lib/perl5
    /usr/share/perl5
    /usr/lib/perl/5.8
    /usr/share/perl/5.8
    /usr/local/lib/site_perl
    .


Environment for perl v5.8.7:
    HOME=/root
    LANG (unset)
    LANGUAGE (unset)
    LD_LIBRARY_PATH (unset)
    LOGDIR (unset)
    PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11
    PERL_BADLANG (unset)
    SHELL=/bin/bash


@p5pRT
Copy link
Author

p5pRT commented Nov 15, 2005

From @ysth

On Mon, Nov 14, 2005 at 05​:13​:00PM -0800, ray_chiang @​ qicsys. com wrote​:

My system is a newly installed Debian 3.1 sarge
with perl-base_5.8.7-7_i386.deb installed.

The test program​:
#!/usr/bin/perl -w
use strict;

use POSIX qw(strftime);
my $time = 1131624000;

$ENV{TZ} = 'UTC+0';
strftime('%Y/%m/%d %H​:%M​:%S', 0, 0, 0, 10, 10, 105);
print scalar(localtime $time), "\n";
# Thu Nov 10 12​:00​:00 2005

$ENV{TZ} = 'UTC+1';
print scalar(localtime $time), "\n";
# Thu Nov 10 12​:00​:00 2005
# this should be "Thu Nov 10 11​:00​:00 2005"

strftime('%Y/%m/%d %H​:%M​:%S', 0, 0, 0, 10, 10, 105);
print scalar(localtime $time), "\n";
# Thu Nov 10 11​:00​:00 2005

This is yet another instance of [perl #26136], [perl #31546], etc.
strftime isn't necessary; you can work around the problem with a
POSIX​::tzset call just before localtime.

It is IMO a glibc (and other libcs as well IIRC) bug. There was a
proposed patch to perl to work around the problem in

http​://nntp.perl.org/group/perl.perl5.porters/106255

that needs a little work still (see its followup), but it's missed the
cutoff for 5.8.8, so wouldn't be released in the perl-5.8.x branch
until 5.8.9 (which would be in April at the earliest, supposing the
maintenance releases resume an every-4-months schedule) unless a
special exception is made.

Anybody feel like working on that patch further? If it gets applied
to the development sources, vendors may end up including it in their
releases.

@p5pRT
Copy link
Author

p5pRT commented Nov 15, 2005

The RT System itself - Status changed from 'new' to 'open'

@p5pRT
Copy link
Author

p5pRT commented Nov 15, 2005

From olsena@odscompanies.com

-----Original Message-----
From​: Yitzchak Scott-Thoennes [mailto​:sthoenna@​efn.org]
Sent​: Tuesday, November 15, 2005 12​:23 PM
To​: perl5-porters@​perl.org
Subject​: Re​: [perl #37678] POSIX​::strftime affects the behavior of
localtime

On Mon, Nov 14, 2005 at 05​:13​:00PM -0800, ray_chiang @​ qicsys. com wrote​:

My system is a newly installed Debian 3.1 sarge
with perl-base_5.8.7-7_i386.deb installed.

The test program​:
#!/usr/bin/perl -w
use strict;

use POSIX qw(strftime);
my $time = 1131624000;

$ENV{TZ} = 'UTC+0';
strftime('%Y/%m/%d %H​:%M​:%S', 0, 0, 0, 10, 10, 105);
print scalar(localtime $time), "\n";
# Thu Nov 10 12​:00​:00 2005

$ENV{TZ} = 'UTC+1';
print scalar(localtime $time), "\n";
# Thu Nov 10 12​:00​:00 2005
# this should be "Thu Nov 10 11​:00​:00 2005"

strftime('%Y/%m/%d %H​:%M​:%S', 0, 0, 0, 10, 10, 105);
print scalar(localtime $time), "\n";
# Thu Nov 10 11​:00​:00 2005

This is yet another instance of [perl #26136], [perl #31546], etc.
strftime isn't necessary; you can work around the problem with a
POSIX​::tzset call just before localtime.

I have never gotten POSIX​::strftime to work under AIX. 50% of the tests
fail and the function appears to return garbage.

@p5pRT
Copy link
Author

p5pRT commented May 22, 2008

p5p@spam.wizbit.be - Status changed from 'open' to 'resolved'

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant