1.7.9 : date command fails for year 1900

cygwin cygwin@overbearing.org
Sun Jan 22 20:38:00 GMT 2012


Thanks for corroborating my finding.  Does anybody else think it is odd 
that this has not been pointed out before?  Why would date use signed 
long integers to hold numbers of seconds?  You would think this problem 
would have been detected in like 1974 or so.  Do I just suck it up, or 
is there a work around for this?  I am on 32bit winXP if it helps any.

Incidentally cal seems to figure out dates in the distant past just fine:

$ cal 14 10 1066
     October 1066
Su Mo Tu We Th Fr Sa
  1  2  3  4  5  6  7
  8  9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31



Regards,
-Dave


On 1/22/2012 7:21 PM, Buchbinder, Barry (NIH/NIAID) [E] wrote:
> cygwin sent the following at Friday, January 20, 2012 7:34 PM
>
>> I'm seeing a problem with my setup where the date command fails in an
>> odd way:
>>
>> this is what it does: $ date -d '1 January 1900' date: invalid date `1
>> January 1900'
>>
>> same thing on a linux box: $ date -d '1 January 1900' Mon Jan 1 00:00:00
>> PMT 1900
>>
>> any dates after 1901 seem to work OK: $ date -d '1 January 1902' Wed Jan
>> 1 00:00:00 PMT 1902
>>
>> but nothing works before then:
>>
>> $ date -d 'today - 150 years' date: invalid date `today - 150 years'
>>
>> $ date -d 'today - 100 years' Sun Jan 21 01:33:27 WET 1912
>>
>> this is the info for the date command:
>>
>> $ date --version date (GNU coreutils) 8.14 Packaged by Cygwin (8.14-1)
>> Copyright (C) 2011 Free Software Foundation, Inc. License GPLv3+: GNU
>> GPL version 3 or later<http://gnu.org/licenses/gpl.html>. This is
>> free software: you are free to change and redistribute it. There is NO
>> WARRANTY, to the extent permitted by law.
>>
>> Written by David MacKenzie.
>>
>> Where should I start debugging?
> Start by finding out exactly when date stops working.
>
> The followijng is the same date version, everything up to date, on
> Windws 7:
>
> /c>  date -d 1901-12-13\ 15:45:52
> Fri, Dec 13, 1901  3:45:52 PM
> /c>  date -d 1901-12-13\ 15:45:51
> date: invalid date `1901-12-13 15:45:51'
> /c>  date -d 1901-12-13\ 15:45:51.999
> date: invalid date `1901-12-13 15:45:51.999'
> /c>  date -d 1901-12-13\ 15:45:52.000
> Fri, Dec 13, 1901  3:45:52 PM
>
> So 1901-12-13 15:45:52 is the earliest that works  Waiting a few minutes
> and repeating does not change this.
>
> When is that in seconds:
>
> /c>  date -d 1901-12-13\ 15:45:52 +%s
> -2147483648
>
> %s give the number of "seconds since 1970-01-01 00:00:00 UTC".  So this
> critical time is 2147483648 seconds before the start of the Unix epoch.
>
> Now -2147483648 = -2^31.  So it looks like cygwin date encodes seconds as
> signed long integers.  Presumably, date on your linux box was compiled to
> use something bigger.
>
> - Barry
>    Disclaimer:  Statements made herein are not made on behalf of NIAID.
>


--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple



More information about the Cygwin mailing list