ports/74042: Perl-5.6.1 does not handle timezone properly

Sergey Potapov sp at bar.alkor.ru
Wed Nov 17 15:40:32 UTC 2004


>Number:         74042
>Category:       ports
>Synopsis:       Perl-5.6.1 does not handle timezone properly
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-ports-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Wed Nov 17 15:40:31 GMT 2004
>Closed-Date:
>Last-Modified:
>Originator:     Sergey Potapov
>Release:        FreeBSD 5.2.1-RELEASE-p4 i386
>Organization:
no
>Environment:

System: FreeBSD bar.alkor.ru 5.2.1-RELEASE-p4 FreeBSD 5.2.1-RELEASE-p4 #0: Thu Apr 1 12:35:12 MSD 2004 amil@:/usr/src/sys/i386/compile/MAIL i386

This is perl, v5.6.1 built for i386-freebsd

Copyright 1987-2001, Larry Wall

Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.

Complete documentation for Perl, including FAQ lists, should be found on
this system using `man perl' or `perldoc perl'.  If you have access to the
Internet, point your browser at http://www.perl.com/, the Perl Home Page.

	
>Description:

	Perl POSIX::strftime does not handle daylight saving correctly.
	Detail are in "How-To-Repeat".
	It's probably problem of Perl.
	Repeated on 4.10-RELEASE

>How-To-Repeat:

$ cc -Wall t.c
$ cat t.c # - C program
#include <stdio.h>
#include <time.h>
static void
printtime(time_t t) {
  char buf[256];
  strftime(buf,sizeof(buf),"%F %T %z %Z\n",localtime(&t));
  printf(buf);
}
int
main(void)
{
  time_t t = time(NULL);
  t = t - t%(24*3600);
  printtime(t);
  printtime(t-30*24*3600);
  return 0;
}
$ cat t.pl # Perl program doing same thing
#!/usr/bin/perl -w
use strict;
use POSIX qw();
my $time = time;
$time = $time - ($time%(24*3600));
my @d0 = localtime($time);
print(POSIX::strftime("%F %T %z %Z\n", at d0));
my @d1 = localtime($time-30*24*3600);
print(POSIX::strftime("%F %T %z %Z\n", at d1));
__END__
$ ./a.out
2004-11-17 03:00:00 +0300 MSK
2004-10-18 04:00:00 +0400 MSD
$ perl -w t.pl
2004-11-17 03:00:00 +0300 MSK
2004-10-18 04:00:00 +0300 MSK
$ echo $LANG
ru_RU.KOI8-R
$ echo $LC_ALL
ru_RU.KOI8-R
$

Perl's strftime does not provide right timezone offset and name for
daylight saving times. C program works correctly (first date is in
"winter" time, second in "daylight saving").


>Fix:

	Unknown.


>Release-Note:
>Audit-Trail:
>Unformatted:



More information about the freebsd-ports-bugs mailing list