[Numpy-discussion] RFC: A (second) proposal for implementing some date/time types in NumPy

Francesc Alted faltet@pytables....
Tue Jul 29 06:57:09 CDT 2008


A Tuesday 29 July 2008, Francesc Alted escrigué:
[snip]
> > >   In [12]: t[0]
> > >   Out[12]: 24       # representation as an int64
> >
> > why not a "pretty" representation of timedelta64 too? I'd like that
> > better (at least for __str__, perhaps __repr__ should be the raw
> > numbers.
>
> That could be an interesting feature.  Here it is what the
> ``datetime``
>
> module does:
> >>> delta = datetime.datetime(1980,2,1)-datetime.datetime(1970,1,1)
> >>> delta.__str__()
>
> '3683 days, 0:00:00'
>
> >>> delta.__repr__()
>
> 'datetime.timedelta(3683)'
>
> For the NumPy ``timedelta64`` with a time unit of days, it could be
>
> something like:
> >>> delta_days.__str__()
>
> '3683 days'
>
> >>> delta_days.__repr__()
>
> 3683
>
> while for a ``timedelta64`` with a time unit of microseconds it could
>
> be:
> >>> delta_us.__str__()
>
> '3683 days, 3:04:05.000064'
>
> >>> delta_us.__repr__()
>
> 318222245000064
>
> But I'm open to other suggestions, of course.

Sorry, but I've been a bit inconsistent here as this is documented in 
the proposal already.  Just to clarify things, here it goes the 
str/repr suggestions (just a bit more populated with examples) in the 
second version of the second proposal.

For absolute times:

In [5]: numpy.datetime64(42, 'us')
Out[5]: datetime64(42, 'us')

In [6]: print numpy.datetime64(42)
1970-01-01T00:00:00.000042  # representation in ISO 8601 format

In [7]: print numpy.datetime64(367.7, 'D')  # decimal part is lost
1971-01-02  # still ISO 8601 format

In [8]: numpy.datetime('2008-07-18T12:23:18', 'm')  # from ISO 8601
Out[8]: datetime64(20273063, 'm')

In [9]: print numpy.datetime('2008-07-18T12:23:18', 'm')
Out[9]: 2008-07-18T12:23

In [10]: t = numpy.zeros(5, dtype="datetime64[D]")

In [11]: print t
[1970-01-01  1970-01-01  1970-01-01  1970-01-01  1970-01-01]

In [12]: repr(t)
Out[12]: array([0, 0, 0, 0, 0], dtype="datetime64[D]")

In [13]: print t[0]
1970-01-01

In [14]: t[0]
Out[14]: datetime64(0, unit='D')

In [15]: t[0].item()     # getter in action
Out[15]: datetime.datetime(1970, 1, 1, 0, 0)


For relative times:

In [5]: numpy.timedelta64(10, 'us')
Out[5]: timedelta64(10, 'us')

In [6]: print numpy.timedelta64(10, 'ms')
0:00:00.010

In [7]: print numpy.timedelta64(3600.2, 'm')  # decimal part is lost
2 days, 12:00

In [8]: t0 = numpy.zeros(5, dtype="datetime64[ms]")

In [9]: t1 = numpy.ones(5, dtype="datetime64[ms]")

In [10]: t = t1 - t1

In [11]: t[0] = datetime.timedelta(0, 24)  # setter in action

In [12]: print t
[0:00:24.000  0:00:01.000  0:00:01.000  0:00:01.000  0:00:01.000]

In [13]: repr(t)
Out[13]: array([24000, 1, 1, 1, 1], dtype="timedelta64[ms]")

In [14]: print t[0]
0:00:24.000

In [15]: t[0]
Out[15]: timedelta(24000, unit='ms')

In [16]: t[0].item()     # getter in action
Out[16]: datetime.timedelta(0, 24)


Cheers,

-- 
Francesc Alted


More information about the Numpy-discussion mailing list