[Zope] Re: Help with DateTime.earliestTime()

Andreas Jung lists at zopyx.com
Sun Aug 26 15:23:22 EDT 2007



--On 26. August 2007 19:12:18 +0000 Eric <eric at thomasfam.com> wrote:

> Dieter Maurer <dieter at ...> writes:
>
>>
>> Eric Thomas wrote at 2007-8-25 07:18 -0500:
>> > I've been having a site problem that I've tracked down to DateTime.
>> > Simply enough, the code snippets below both try to add 31 days to the
>> > first day in October.  I'm expecting this to result in the first day
>> > of November.
>> >
>> > Good Example:
>> >
>> >>>> from DateTime import DateTime
>> >>>> start=DateTime('2005/10/01 01:00:00 GMT-5')
>> >>>> print start
>> > 2005/10/01 01:00:00 GMT-5
>> >>>> earlyStart=start.earliestTime()
>> >>>> print earlyStart
>> > 2005/10/01
>> >>>> print earlyStart+31
>> > 2005/11/01
>> >
>> > Bad Example:  (Here's the problem)
>> >
>> >>>> from DateTime import DateTime
>> >>>> start=DateTime('2005/10/01 01:00:00 US/Central')
>> >>>> print start
>> > 2005/10/01 01:00:00 US/Central
>> >>>> earlyStart=start.earliestTime()
>> >>>> print earlyStart
>> > 2005/10/01
>> >>>> print earlyStart+31
>> > 2005/10/31 23:00:00 US/Central
>> >
>> > I've confirmed this occurs with several of the US/ timezones
>> > (US/Pacific, US/Alaska, etc)
>>
>> This looks like a daytime saving problem:
>>
>>   With daytime saving, the clock often is put back for an hour
>>   at the last samday in october....
>>
>> The "DateTime" implementation could avoid this
>> *if* the arithmetic would only accept
>> "int" (then it would be very likely that you only want to modify
>> the day but not hours, minutes and seconds). But the arithmetic
>> accepts "float" and that necessitates some surprises with
>> time discontinuities (such as daytime saving switches).
>>
>> >
>> > Can anyone help me figure out why the resulting date is coming up 1
>> > hour short of the expected 2005/11/01 ?
>> >
>> > Thanks!
>> >
>> > Eric
> I've submitted this as a zope bug and I agree that it looks like a
> daytime  saving problem.  The problem was tiggered nightly by a Google
> bot hitting  various dates on my site's calendar.
>
> Even more interesting is that the seconds, milliseconds, and timezone
> stored  within the DateTime are correct after the addition.  So, if I
> compare the two  results from the examples I gave using
> DateTime.isEqualTo(), the answer is  True.  This really creates a lot of
> opportunity for error.
>

If you can: use Python's datetime module. DateTime is broken in many ways.

-aj

-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 186 bytes
Desc: not available
Url : http://mail.zope.org/pipermail/zope/attachments/20070826/fe84ba21/attachment.bin


More information about the Zope mailing list