Another surprise from the datetime module
Cameron Simpson
cs at zip.com.au
Thu Jan 30 19:06:31 EST 2014
On 30Jan2014 18:36, Neil Cerutti <neilc at norwich.edu> wrote:
> On 2014-01-30, Roy Smith <roy at panix.com> wrote:
> > I was astounded just now to discover that datetime.timedelta
> > doesn't have a replace() method (at least not in Python 2.7).
> > Is there some fundamental reason why it shouldn't, or is this
> > just an oversight?
> >
> > My immediate use case was wanting to print a timedelta without
> > the fractions of seconds. The most straight-forward is:
> >
> > print td.replace(microseconds=0)
>
> That would be nice.
>
> In the meantime, this works for your use case:
>
> td -= td % timedelta(seconds=1)
Hmm. I do not like the replace() as suggested.
Firstly, replace is a verb, and I would normally read
td.replace(microseconds=0) as an instruction to modify td in place.
Traditionally, such methods in python return None.
So you would need:
td.replace(microseconds=0)
print td
Then, if the intent is to modify td in place, I would far prefer a system of
properties on timedelta objects, eg:
# print the microseconds part
print td.microseconds
# set the microseconds part to zero
td.microseconds = 0
# print the modified timedelta
print td
Also, clearly, such a system needs definition: is "microseconds"
the sub-millisecond fraction or the sub-second fraction, expressed
in microsecond units?
Alternatively, if td.replace() is intened to return a new timedelta
with the specified properties, perhaps another factory would be
cleaner:
td2 = datetime.timedelta(td, microseconds=0)
with a bunch of optional parameters like microseconds for modifying
the initial value (used at call, as above).
Finally, how much of Roy's original wish is addressable by format
strings to print with a specified precision? No good for arithmetic,
but perhaps ok for presentation.
Cheers,
--
Cameron Simpson <cs at zip.com.au>
I knew I was a real biker when I pulled up beside a car at a stoplight and
the people inside locked all the doors.
More information about the Python-list
mailing list