[Python-Dev] Supporting precision in a DateTime type

Steve Alexander steve@cat-box.net
Wed, 27 Feb 2002 17:44:28 +0000


Hi folks,

On #zope3-dev, we were discussing how best to implement a DateTime type 
in Python.

Leaving aside arguments of whether to store it as a packed C tuple, or 
as ms since an epoch, I'd like to think about the concept of precision 
as it relates to dates and times.

As a writer of software applications that people use in people settings, 
I like to use types that reflect the elements of reality that people 
find important.

One aspect of time that is important is its precision. Here's an example

   How long is it between 1992 and March 15, 1993 ?

There isn't a sensible answer. Or, rather, there are many answers, some 
more sensible than others. The correct answer might be "1 year", a date 
range, or an error (perhaps a ValueError). In any case, the correct 
answer depends on the nature of the application.

Thus, if I'm only interested in using dates, such as in an application 
where I'm interested in birthdays, I want to be able to describe a date 
without reference to a particular time. It isn't just a default time, it 
is a "no time specified".
So, I won't get caught later on if I compare that datetime instance with 
another that has a different precision.

It is often possible to resolve differing precisions in an 
application-specific way.

Another way of thinking about precision is as a constraint on possible 
more precise values. So, I can play an April fool prank any time in the 
morning of April 1, in my local time-zone. The actual exact time of my 
pranks will fall within the less precise constraint. This makes dates 
with precision similar to durations.

Common precisions in applications include years, months, iso weeks of a 
year, days.
Any finer precision doesn't really matter; the max precision of time in 
C is ok for most human purposes.

Although you could catch some cases by having distinct types for dates 
and times, this only captures the precision of days. It doesn't help for 
other precisions.

Here's a paper I found via google, that discusses these issues:

   http://www.martinfowler.com/ap2/timePoint.html


ps. I'm not a regular reader of python-dev. Guido suggested I post this 
here for further discussion.
I'll catch up via the web eventually, but please cc me into any relevant 
replies.

--
Steve Alexander