[Python-Dev] dateutil (original) (raw)

Greg Ewing greg at cosc.canterbury.ac.nz
Mon Mar 15 19:32:06 EST 2004


Gustavo Niemeyer <niemeyer at conectiva.com>:

IMO, no. The "relative" here means that the operation made is dependent on what you apply it, and not a "fixed" delta as timedelta would do.

Hmmm. I see what you're getting at, but that interpretation goes beyond what the word "relative" suggests to me. Maybe it makes sense to you, but I think it's going to look confusing to anyone who doesn't share your brain state.

Moreover, the terms "relative" and "delta" and the use of the "+" operator all suggest that these things form some kind of algebra, which they clearly don't.

> So a relativedelta can affect things in a way that's not > relative at all? That sounds very confusing.

It makes sense in this context. Please, have a look at the examples in the documentation.

This seems to be a matter of opinion. I've looked at the examples, and haven't seen anything to make me change my mind. I still think it's nonsensical to have something called a "delta" that doesn't behave algebraically when you add it to something.

> So there is a hole at 0. Something about that smells wrong.

If you discover what, please tell me. :-)

I think what it means is that you haven't got a single operation with an integer parameter. Rather, you've got two different operations, each of which has a natural number parameter, and you're using the sign of the parameter to encode which operation you want.

Also, I don't understand why the "weeks" parameter isn't used to adjust the number of weeks here, instead of supplying it in a rather funky way as a kind of parameter to a parameter. In other words, instead of

relativedelta(day = MO(+3))

why not

relativedelta(day = MO, weeks = +2)

which would make more sense to me.

> I think the OP's question was what happens if you do > > for i in range(12): > d += relativedelta(months=+1)

I answered that just below the above example. It lands on the same date.

In all cases? You mean that

d = datetime(2000, 1, 31) for i in range(12): d += relativedelta(months=+1)

will give the same result as

d = datetime(2000, 1, 31) d += relativedelta(months=+12)

and/or

d = datetime(2000, 1, 31) d += relativedelta(years=+1)

?

Greg Ewing, Computer Science Dept, +--------------------------------------+ University of Canterbury, | A citizen of NewZealandCorp, a | Christchurch, New Zealand | wholly-owned subsidiary of USA Inc. | greg at cosc.canterbury.ac.nz +--------------------------------------+



More information about the Python-Dev mailing list