# [egenix-users] RelativeDateTime

M.-A. Lemburg mal at egenix.com
Mon Jan 19 13:01:28 CET 2004

```Francois Girault wrote:
> On Thu, 15 Jan 2004 11:50:55 +0100
> M.-A. Lemburg wrote:
>
>
>>Francois Girault wrote:
>>
>>>So the behavior we expect is the same than postgresql with interval
>>>type. IMHO, postgresql (ie SQL99 interval type) has a very logical
>>
>>Do you have a reference for this ?
>>
>
> This directory contains many docs about SQL99 :
>
> http://trinetra.ncb.ernet.in/education/modules/dbms/SQL99/
>
> But I haven't found a fully explained date arithmetic.
>
> In this document :
>
> http://trinetra.ncb.ernet.in/education/modules/dbms/SQL99/ansi-iso-9075-2-1999.pdf
>
>  a chapter about interval says on page 29 : "Arithmetic
> operations involving values of type datetime or interval obey the
> natural rules associated with dates and times and yield valid datetime
> or interval results according to the Gregorian calendar."
>
> "natural rules" are *very* ambigious, but playing with postgres tell
>
> => SELECT date('2002-01-30') + "interval"('1 mon');
>       ?column?
> ---------------------
>  2002-02-28 00:00:00
> (1 row)
>
> For date from january, 28th to january, 31th adding one month result in
> the last day of february. From a math point of view, it seems wrong, but
> thinking more about make me consider it 'natural'

The problem with this approach is obvious, e.g. what would
the outcome of the following variations be:

Date(2004,1,31) + RelativeDateTime(months=+1)
Date(2004,1,31) + RelativeDateTime(months=+2) - RelativeDateTime(months=-2)
Date(2004,1,31) + RelativeDateTime(months=+3)

BTW, the stragety chosen in mxDateTime's implementation for
RelativeDateTime matches that of MS Excel VBA, see e.g.

http://www.cpearson.com/excel/datearith.htm

(Only by accident, I must say :-)

--
Marc-Andre Lemburg
eGenix.com

Professional Python Services directly from the Source  (#1, Jan 18 2004)
>>> Python/Zope Consulting and Support ...        http://www.egenix.com/