rwburden has asked for the wisdom of the Perl Monks concerning the following question:
use Time::Local; my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime() +; my $datetime = timelocal (0,0,0,$mday,$mon,$year); print "$datetime $sec $min $hour $mday $mon $year\n"; $datetime = timelocal (0,0,0,12,11,106); print "$datetime $sec $min $hour $mday $mon $year\n"; ($sec, $min, $hour, $mday, $mon, $year) = (0,0,0,12,11,106); $datetime = timelocal ($sec, $min, $hour, $mday, $mon, $year); print "$datetime $sec $min $hour $mday $mon $year\n"; $myage = age ("1966/7/30"); print "my age in days: $myage\n"; sub age { my $date = shift @_; my ($year,$mon,$mday) = split m%/%, $date; #my failed attempt to coerce the type to be integer my ($iyear, $imon, $imday) = (0,0,0); $iyear += $year; $imon += $mon; $imday += $mday; $imon--; #shift range from 1-12 to 0-11 $iyear -= 1900; my $modulus = 60*60*24; #number of seconds in a day. my $now = time(); my $remainder = $now % $modulus; $now -= $remainder; $now /= $modulus; #number of days since the epoch my $datetime = timelocal(0,0,0,$imday,$imon,$iyear); $datetime /= $modulus; return $now - $datetime; } Output: C:\CONVER~1>perl -w test3.pl 1165899600 47 35 12 12 11 106 1165899600 47 35 12 12 11 106 1165899600 0 0 0 12 11 106 Day too small - -1251 > -1 Sec too small - -1251 < 68400 Cannot handle date (0, 0, 0, 30, 6, 1966) at test3.pl line 40 I am using ActivePerl: C:\CONVER~1>perl -V Summary of my perl5 (revision 5 version 8 subversion 8) configuration: Platform: osname=MSWin32, osvers=5.0, archname=MSWin32-x86-multi-thread uname='' config_args='undef' hint=recommended, useposix=true, d_sigaction=undef usethreads=define use5005threads=undef useithreads=define usemulti +plicity=de fine useperlio=define d_sfio=undef uselargefiles=define usesocks=undef use64bitint=undef use64bitall=undef uselongdouble=undef usemymalloc=n, bincompat5005=undef Compiler: cc='cl', ccflags ='-nologo -GF -W3 -MD -Zi -DNDEBUG -O1 -DWIN32 -D +_CONSOLE - DNO_STRICT -DHAVE_DES_FCRYPT -DNO_HASH_SEED -DUSE_SITECUSTOMIZE -DPERL +_IMPLICIT_ CONTEXT -DPERL_IMPLICIT_SYS -DUSE_PERLIO -DPERL_MSVCRT_READFIX', optimize='-MD -Zi -DNDEBUG -O1', cppflags='-DWIN32' ccversion='12.00.8804', gccversion='', gccosandvers='' intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=1234 d_longlong=undef, longlongsize=8, d_longdbl=define, longdblsize=10 ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='__int64 +', lseeksi ze=8 alignbytes=8, prototype=define Linker and Libraries: ld='link', ldflags ='-nologo -nodefaultlib -debug -opt:ref,icf -l +ibpath:"C: \Perl\lib\CORE" -machine:x86' libpth=\lib libs= oldnames.lib kernel32.lib user32.lib gdi32.lib winspool.lib + comdlg32 .lib advapi32.lib shell32.lib ole32.lib oleaut32.lib netapi32.lib uui +d.lib ws2_ 32.lib mpr.lib winmm.lib version.lib odbc32.lib odbccp32.lib msvcrt.l +ib perllibs= oldnames.lib kernel32.lib user32.lib gdi32.lib winspool +.lib comd lg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib netapi32.lib + uuid.lib ws2_32.lib mpr.lib winmm.lib version.lib odbc32.lib odbccp32.lib msvc +rt.lib libc=msvcrt.lib, so=dll, useshrplib=yes, libperl=perl58.lib gnulibc_version='' Dynamic Linking: dlsrc=dl_win32.xs, dlext=dll, d_dlsymun=undef, ccdlflags=' ' cccdlflags=' ', lddlflags='-dll -nologo -nodefaultlib -debug -opt: +ref,icf - libpath:"C:\Perl\lib\CORE" -machine:x86' Characteristics of this binary (from libperl): Compile-time options: MULTIPLICITY PERL_IMPLICIT_CONTEXT PERL_IMPLICIT_SYS PERL_MALLOC_WRAP PL_OP_SLAB_ALLOC USE_ITHREADS USE_LARGE_FILES USE_PERLIO USE_SITECUSTOMIZE Locally applied patches: ActivePerl Build 819 [267479] Iin_load_module moved for compatibility with build 806 PerlEx support in CGI::Carp Less verbose ExtUtils::Install and Pod::Find Patch for CAN-2005-0448 from Debian with modifications Rearrange @INC so that 'site' is searched before 'perl' Partly reverted 24733 to preserve binary compatibility 28671 Define PERL_NO_DEV_RANDOM on Windows 28376 Add error checks after execing PL_cshname or PL_sh_path 28305 Pod::Html should not convert "foo" into ``foo'' 27736 Make perl_fini() run with Sun WorkShop compiler 27619 Bug in Term::ReadKey being triggered by a bug in Term::R +eadLine 27549 Move DynaLoader.o into libperl.so 27528 win32_pclose() error exit doesn't unlock mutex 27527 win32_async_check() can loop indefinitely 27515 ignore directories when searching @INC 27359 Fix -d:Foo=bar syntax 27210 Fix quote typo in c2ph 27203 Allow compiling swigged C++ code 27200 Make stat() on Windows handle trailing slashes correctly 27194 Get perl_fini() running on HP-UX again 27133 Initialise lastparen in the regexp structure 27034 Avoid "Prototype mismatch" warnings with autouse 26970 Make Passive mode the default for Net::FTP 26921 Avoid getprotobyname/number calls in IO::Socket::INET 26897,26903 Make common IPPROTO_* constants always available 26670 Make '-s' on the shebang line parse -foo=bar switches 26536 INSTALLSCRIPT versus INSTALLDIRS 26379 Fix alarm() for Windows 2003 26087 Storable 0.1 compatibility 25861 IO::File performace issue 25084 long groups entry could cause memory exhaustion 24699 ICMP_UNREACHABLE handling in Net::Ping Built under MSWin32 Compiled at Aug 29 2006 12:42:41 @INC: C:/Perl/site/lib C:/Perl/lib .
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: timelocal() rejects string-derived input
by jbert (Priest) on Dec 12, 2006 at 18:08 UTC | |
by rwburden (Novice) on Dec 12, 2006 at 18:53 UTC | |
by jbert (Priest) on Dec 12, 2006 at 23:39 UTC | |
|
Re: timelocal() rejects string-derived input
by Joost (Canon) on Dec 12, 2006 at 18:02 UTC |