[Python-Dev] proposal: add basic time type to the standard library

Jim Fulton jim@zope.com
Wed, 27 Feb 2002 08:01:43 -0500


Tim Peters wrote:
> 
> [Jim Fulton]
> > ZODB has a TimeStamp type that uses a 32-bit unsigned integer
> > to store year, month,, day, hour, and minute in a way that makes it dirt
> > simple to extract a component.
> 
> You really think so?  It's a mixed-radix scheme:
> 
>           v=((((y-1900)*12+mo-1)*31+d-1)*24+h)*60+m;
> 
> so requires lots of expensive integer division and remainder operations to
> pick apart again (the trend in CPUs is to make these relatively more
> expensive, not less, and e.g. Itanium doesn't even have an integer division
> instruction).

Compared to storing date-times as offsets from an epoch, this is
much simpler and cheaper.

> If we had this to do over again, I'd strongly suggest assigning 12 bits to
> the year, 4 to the month, 5 each to day and hour, and 6 to the minute.  The
> components would then be truly dirt simple and dirt cheap to extract, and we
> wouldn't even have to bother switching between 0-based and 1-based for the
> months and days (let 'em stay 1-based).  They would still sort and compare
> correctly in packed format.  The only downside I can see is that not
> pursuing every last drop of potential compression would shrink the dynamic
> range from 8000+ years to 4000+ years, but we're likely to have much worse
> problems in Zope by the year 5900 anyway <wink>.

Sounds good to me.

Jim

--
Jim Fulton           mailto:jim@zope.com       Python Powered!        
CTO                  (888) 344-4332            http://www.python.org  
Zope Corporation     http://www.zope.com       http://www.zope.org