On Jan 27, 2014, at 8:29 AM, Derek Atkins <warl...@mit.edu> wrote:

> Gary Bilkus <m...@gary.bilkus.com> writes:
> 
>> Given that time_t is always a signed integer value, wouldn't
>> 
>> return (double)(time1-time2)
>> 
>> just work anyway, at least as far as a patch for mingw is concerned?
> 
> Is it always a signed integer?  Can't it sometimes be unsigned?
> 
> This is the "year 2037" problem, where 32-bit unsigned time rolls over.
> However there is also a "Year 2106" problem, which is where 32-bit
> unsigned time rolls over.  I think there *are* some systems where it's
> unsigned, but still 32 bits.  Or at least there are apps where that is
> the case.
It's actually the "2038 problem", as a signed 32-bit time_t overflows at 
03:14:07 2038-01-19.

Representation of time_t is up to the C library unless the application 
re-implements all of the standard C functions which use it including retrieving 
the tick count from the system clock. 

http://en.wikipedia.org/wiki/Unix_time#Representing_the_number reports that QNX 
V6 implements it as unsigned, but that it's generally implemented as signed. I 
don't think there's any reason to port GC to QNX.

None of which matters a whole lot. We needed dates past 2038 to support 
scheduled transactions, so we don't use time_t. AQBanking and LibOFX aren't 
AFAICT concerned about far-future dates, so for the moment time_t, even 32 bit, 
is fine. 

The real problem we're dealing with here is that MinGW screwed up handling 
Microsoft's time_t size arrangements, effectively breaking it for 64-bit 
values. Until they sort that out, ISTM the solution is to coerce 32-bit time_t 
on 64-bit builds.

Regards,
John Ralls



_______________________________________________
gnucash-devel mailing list
gnucash-devel@gnucash.org
https://lists.gnucash.org/mailman/listinfo/gnucash-devel

Reply via email to