[Libreoffice] [REVIEW][3-4] date change regression fdo#44385

Andrew Douglas Pitonyak andrew at pitonyak.org
Thu Jan 19 18:03:02 PST 2012

On 01/16/2012 08:01 AM, Eike Rathke wrote:
> Hi Noel,
> On Friday, 2012-01-13 09:51:33 +0000, Noel Power wrote:
>> this change ( the variant )  is what is on master, here the
>> intention is as Andrew pointed out ( in a previous mail discussing
>> the regression )  to allow operations on date types return dates (
>> regardless of the operation ) which seems reasonable.
> Not every operation on date types should return a date, i.e.
> substracting two dates should return a number of days (I don't think
> adding/multiplying/dividing two dates makes sense, but it should return
> a number of days as well).
>    Eike
The original code verified that a date was used in at least one 
argument, and, if so, then a date is returned. Eike, to follow your 
suggestion of NOT returning a date if we expect that the answer should 
be a number of days, then we would want to check both parameters, and if 
both are of type date then return a double rather than date. If you 
really desire to strive for accuracy, then what you want to say is that 
if two dates are involved and there is a subtraction, then you desire 
the elapsed time between the two date objects.

I need to be careful in what I say because I am not intimate with the 
code, but, I believe that a date is internally represented as a double. 
I also seem to remember that a "time" is a date that has "zero days". 
This leaves a day that cannot be represented (well, it won't print as a 
date anyway, at least I think it did not when I last tested it long 
before LibO existed).

One may choose to argue that date arithmetic makes no sense (ie, what 
does it mean to add today to today, or to multiply today by 2), but I 
believe that the original solution was written to allow for the common 
case and do the expected thing. So, Perhaps I have code such as (time_1 
+ time_2 - time_3), the intent seems to be to determine the difference 
between time_2 and time_3 and add that to time_1. In the original code, 
that would work. I suppose that if we add a check to verify that one 
parameter is a date and that the other is not, then our result would be 
mostly as expected, but that feels onerous. It is a bit difficult and 
fraught with peril, however, because I believe that if the new time 
passes midnight (ie, 24 hours), then it will suddenly display as a date 
rather than a time.

Andrew Pitonyak
My Macro Document: http://www.pitonyak.org/AndrewMacro.odt
Info:  http://www.pitonyak.org/oo.php

More information about the LibreOffice mailing list