This is the mail archive of the cygwin mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: 1.7.9 : date command fails for year 1900


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]