I recently noticed that for non-existent files, mirror (the Perl script) 
now reports dates of "2069/12/31-19:00:00" instead of "1969/12/31-19:00:00" :

      Compare src README.ftp (1): 1998/11/06-00:00:00 1301 f
             dest README.ftp (): 2069/12/31-19:00:00 0 0


Oh, gross.  I just looked at mirror.pl:


        if( $year < 70 ){
            $year += 2000;
        }
        else {
            $year += 1900;
        }
        

But where exactly is the problem?  

The "70" in the if statement looks like it is based on the Unix epoch's 
starting in 1970 (and therefore should be correct).  

But the "19:00" is a reminder that the epoch's start in local time was as 
early as _noon_ on Dec. 31, 1969.  Therefore, checking the local-time year
against (19)70 is erroneous.


I thought I heard that Perl represents the year as <year number> - 1900.
(So the year 2000 is represented as 100.)  

Does that mean that the then part of the if statement above is completely 
superfluous?  (The four-digit year would always be 1900 + perl's year, 
right?)

In fact, does that mean that the only thing that the "$year += 2000;"
part does it cause the 2069 error?  (That is, the year can be less than
70 only for the local time of the first 12 hours of the epoch, right?)


I don't recall when mirror's dates for non-existent files changed from
1969.... to 2069...  (I don't know if it changed at a certain date
or if I upgraded something.)

Is that if statement a bit of supposed Y2K preparation that wasn't
quite prepared right?  

(I recall reading that since Perl returns "99" for 1999, people think
Perl uses only two digits for the year, and don't realize that in
2000, Perl will return a year value of 100.  To print a four-digit
year, they prepend "19" to the year; in 2000, that code will print
"19100".)



Daniel

Reply via email to