Path: utzoo!attcan!uunet!ogicse!hakanson From: hakanson@ogicse.ogi.edu (Marion Hakanson) Newsgroups: comp.lang.perl Subject: Re: ctime.pl (Was: Re: more enhancements?) Message-ID: <8174@ogicse.ogi.edu> Date: 22 Mar 90 19:50:17 GMT References: <8017@ogicse.ogi.edu> <8095@ogicse.ogi.edu> Organization: Oregon Graduate Institute (formerly OGC), Beaverton, OR Lines: 57 In article <8095@ogicse.ogi.edu> I write: >. . . >If one does NOT care about the timezone, then ctime.pl can be modified >to call "gmtime" instead of "localtime", and you can just substitute >a literal "GMT" or "UCT" for the timezone string. Portable, too. >. . . Here's the previously-posted ctime.pl, with my modifications to deal with an undefined TZ envariable. There's also a change to print out the proper portion of a "PST8PDT" format TZ, depending on whether or not "isdst" is set. At least now it doesn't print out "" for the timezone, or otherwise mislead you. Larry, this is probably of general enough use that it should be included in the Perl distribution library. Unless, of course, you plan to add a ctime(3) call to Perl itself (:-). -- Marion Hakanson Domain: hakanson@cse.ogi.edu UUCP : {hp-pcd,tektronix}!ogicse!hakanson ==========cut here======== ;# ctime.pl is a simple Perl emulation for the well known ctime(3C) function. ;# ;# Waldemar Kebsch, Federal Republic of Germany, November 1988 ;# kebsch.pad@nixpbe.UUCP ;# Modified March 1990 to better handle timezones ;# $Id: ctime.pl,v 1.3 90/03/22 10:49:10 hakanson Exp $ ;# Marion Hakanson (hakanson@cse.ogi.edu) ;# Oregon Graduate Institute of Science and Technology ;# ;# usage: ;# ;# #include # see the -P and -I option in perl.man ;# $Date = do ctime(time); @DoW = ('Sun','Mon','Tue','Wed','Thu','Fri','Sat'); @MoY = ('Jan','Feb','Mar','Apr','May','Jun', 'Jul','Aug','Sep','Oct','Nov','Dec'); sub ctime { local($time) = @_; local($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst); # Use GMT if can't find local TZ $TZ = defined($ENV{'TZ'}) ? $ENV{'TZ'} : 'GMT'; ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = ($TZ eq 'GMT') ? gmtime($time) : localtime($time); # Hack to deal with 'PST8PDT' format of TZ if ( $TZ =~ /\d+/ ) { $TZ = $isdst ? $' : $`; } $year += ($year < 70) ? 2000 : 1900; sprintf("%s %s %2d %2d:%02d:%02d %s %4d\n", $DoW[$wday], $MoY[$mon], $mday, $hour, $min, $sec, $TZ, $year); } ==========cut here========