cvs commit: perlfaq perlfaq4.pod

[email protected]
Newsgroups perl.cvs.perlfaq
Message-ID <[email protected]>
cvsuser     02/10/30 10:40:34

  Modified:    .        perlfaq4.pod
  Log:
  this looks like a big patch because i removed the comment characters before
  the bulk of the text.  Russ's explanation doesn't need to be code comments.
  
  * other changes
     + removed the flame-war bait about localtime() - 86400.   everywhere
     i saw someone discuss that solution people starting flaming each other over
     all sorts of stuff, i don't think it is a good thing to tell newbies to do.
     i also do not like to start off answers with a wrong answer.
     + start off with a module solution
  
  Revision  Changes    Path
  1.35      +51 -49    perlfaq/perlfaq4.pod
  
  Index: perlfaq4.pod
  ===================================================================
  RCS file: /cvs/public/perlfaq/perlfaq4.pod,v
  retrieving revision 1.34
  retrieving revision 1.35
  diff -u -w -r1.34 -r1.35
  --- perlfaq4.pod	23 Oct 2002 01:00:37 -0000	1.34
  +++ perlfaq4.pod	30 Oct 2002 18:40:34 -0000	1.35
  @@ -1,6 +1,6 @@
   =head1 NAME
   
  -perlfaq4 - Data Manipulation ($Revision: 1.34 $, $Date: 2002/10/23 01:00:37 $)
  +perlfaq4 - Data Manipulation ($Revision: 1.35 $, $Date: 2002/10/30 18:40:34 $)
   
   =head1 DESCRIPTION
   
  @@ -449,18 +449,20 @@
   
   =head2 How do I find yesterday's date?
   
  -The C<time()> function returns the current time in seconds since the
  -epoch.  Take twenty-four hours off that:
  +If you only need to find the date (and not the same time), you
  +can use the Date::Calc module.
   
  -    $yesterday = time() - ( 24 * 60 * 60 );
  +	use Date::Calc qw(Today Add_Delta_Days);
   
  -Then you can pass this to C<localtime()> and get the individual year,
  -month, day, hour, minute, seconds values.
  +	my @date = Add_Delta_Days( Today(), -1 );
   
  -Note very carefully that the code above assumes that your days are
  -twenty-four hours each.  For most people, there are two days a year
  -when they aren't: the switch to and from summer time throws this off.
  -A solution to this issue is offered by Russ Allbery.
  +	print "@date\n";
  +
  +Most people try to use the time rather than the calendar to
  +figure out dates, but that assumes that your days are
  +twenty-four hours each.  For most people, there are two days
  +a year when they aren't: the switch to and from summer time
  +throws this off. Russ Allbery offers this solution.
   
       sub yesterday {
   	my $now  = defined $_[0] ? $_[0] : time;
  @@ -469,38 +471,38 @@
   	my $tdst = (localtime $then)[8] > 0;
   	$then - ($tdst - $ndst) * 60 * 60;
       }
  -    # Should give you "this time yesterday" in seconds since epoch relative to
  -    # the first argument or the current time if no argument is given and
  -    # suitable for passing to localtime or whatever else you need to do with
  -    # it.  $ndst is whether we're currently in daylight savings time; $tdst is
  -    # whether the point 24 hours ago was in daylight savings time.  If $tdst
  -    # and $ndst are the same, a boundary wasn't crossed, and the correction
  -    # will subtract 0.  If $tdst is 1 and $ndst is 0, subtract an hour more
  -    # from yesterday's time since we gained an extra hour while going off
  -    # daylight savings time.  If $tdst is 0 and $ndst is 1, subtract a
  -    # negative hour (add an hour) to yesterday's time since we lost an hour.
  -    #
  -    # All of this is because during those days when one switches off or onto
  -    # DST, a "day" isn't 24 hours long; it's either 23 or 25.
  -    #
  -    # The explicit settings of $ndst and $tdst are necessary because localtime
  -    # only says it returns the system tm struct, and the system tm struct at
  -    # least on Solaris doesn't guarantee any particular positive value (like,
  -    # say, 1) for isdst, just a positive value.  And that value can
  -    # potentially be negative, if DST information isn't available (this sub
  -    # just treats those cases like no DST).
  -    #
  -    # Note that between 2am and 3am on the day after the time zone switches
  -    # off daylight savings time, the exact hour of "yesterday" corresponding
  -    # to the current hour is not clearly defined.  Note also that if used
  -    # between 2am and 3am the day after the change to daylight savings time,
  -    # the result will be between 3am and 4am of the previous day; it's
  -    # arguable whether this is correct.
  -    #
  -    # This sub does not attempt to deal with leap seconds (most things don't).
  -    #
  -    # Copyright relinquished 1999 by Russ Allbery <[email protected]>
  -    # This code is in the public domain
  +		
  +Should give you "this time yesterday" in seconds since epoch relative to
  +the first argument or the current time if no argument is given and
  +suitable for passing to localtime or whatever else you need to do with
  +it.  $ndst is whether we're currently in daylight savings time; $tdst is
  +whether the point 24 hours ago was in daylight savings time.  If $tdst
  +and $ndst are the same, a boundary wasn't crossed, and the correction
  +will subtract 0.  If $tdst is 1 and $ndst is 0, subtract an hour more
  +from yesterday's time since we gained an extra hour while going off
  +daylight savings time.  If $tdst is 0 and $ndst is 1, subtract a
  +negative hour (add an hour) to yesterday's time since we lost an hour.
  +
  +All of this is because during those days when one switches off or onto
  +DST, a "day" isn't 24 hours long; it's either 23 or 25.
  +
  +The explicit settings of $ndst and $tdst are necessary because localtime
  +only says it returns the system tm struct, and the system tm struct at
  +least on Solaris doesn't guarantee any particular positive value (like,
  +say, 1) for isdst, just a positive value.  And that value can
  +potentially be negative, if DST information isn't available (this sub
  +just treats those cases like no DST).
  +
  +Note that between 2am and 3am on the day after the time zone switches
  +off daylight savings time, the exact hour of "yesterday" corresponding
  +to the current hour is not clearly defined.  Note also that if used
  +between 2am and 3am the day after the change to daylight savings time,
  +the result will be between 3am and 4am of the previous day; it's
  +arguable whether this is correct.
  +
  +This sub does not attempt to deal with leap seconds (most things don't).
  +
  +
   
   =head2 Does Perl have a Year 2000 problem?  Is Perl Y2K compliant?
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.