Re: [Numpy-discussion] just the date part of a datetime64[s]?

2012-02-09 Thread John Salvatier
Thanks Mark!

John

On Wed, Feb 8, 2012 at 6:48 PM, Mark Wiebe mwwi...@gmail.com wrote:

 Converting between date and datetime requires caution, because it depends
 on your time zone. Because all datetime64's are internally stored in UTC,
 simply casting as in your example treats it in UTC. The 'astype' function
 does not raise an error to tell you that this is problematic, because
 NumPy's default casting for that function has no error policy (yet).

 Here's the trouble you can get into:

 x = datetime64('2012-02-02 22:00:00', 's')

 x.astype('M8[D]')
 Out[19]: numpy.datetime64('2012-02-03')


 The trouble happens the other way too, because a date is represented as
 midnight UTC. This would also raise an exception, but for the fact that
 astype does no checking:

 x = datetime64('2012-02-02')

 x.astype('M8[m]')
 Out[23]: numpy.datetime64('2012-02-01T16:00-0800')


 The intention is to have functions which handles this casting explicitly,
 called datetime_as_date and date_as_datetime. They would take a timezone
 parameter, so the code explicitly specifies how the conversion takes place.
 A crude replacement for now is:

 x = datetime64('2012-02-02 22:00:00', 's')

 np.datetime64(np.datetime_as_string(x, timezone='local')[:10])
 Out[21]: numpy.datetime64('2012-02-02')


 This is hackish, but it should do what you want.

 -Mark

 On Wed, Feb 8, 2012 at 9:10 AM, John Salvatier 
 jsalv...@u.washington.eduwrote:


 Hello, is there a good way to get just the date part of a datetime64?
 Frequently datetime datatypes have month(), date(), hour(), etc functions
 that pull out part of the datetime, but I didn't see those mentioned in the
 datetime64 docs. Casting to a 'D' dtype didn't work as I would have hoped:

 In [30]: x= datetime64('2012-02-02 09:00:00', 's')

 In [31]: x
 Out[31]: numpy.datetime64('2012-02-02T09:00:00-0800')

 In [32]: x.astype('datetime64[D]').astype('datetime64[s]')
 Out[32]: numpy.datetime64('2012-02-01T16:00:00-0800')

 What's the simplest way to do this?


 ___
 NumPy-Discussion mailing list
 NumPy-Discussion@scipy.org
 http://mail.scipy.org/mailman/listinfo/numpy-discussion



 ___
 NumPy-Discussion mailing list
 NumPy-Discussion@scipy.org
 http://mail.scipy.org/mailman/listinfo/numpy-discussion


___
NumPy-Discussion mailing list
NumPy-Discussion@scipy.org
http://mail.scipy.org/mailman/listinfo/numpy-discussion


[Numpy-discussion] just the date part of a datetime64[s]?

2012-02-08 Thread John Salvatier
Hello, is there a good way to get just the date part of a datetime64?
Frequently datetime datatypes have month(), date(), hour(), etc functions
that pull out part of the datetime, but I didn't see those mentioned in the
datetime64 docs. Casting to a 'D' dtype didn't work as I would have hoped:

In [30]: x= datetime64('2012-02-02 09:00:00', 's')

In [31]: x
Out[31]: numpy.datetime64('2012-02-02T09:00:00-0800')

In [32]: x.astype('datetime64[D]').astype('datetime64[s]')
Out[32]: numpy.datetime64('2012-02-01T16:00:00-0800')

What's the simplest way to do this?
___
NumPy-Discussion mailing list
NumPy-Discussion@scipy.org
http://mail.scipy.org/mailman/listinfo/numpy-discussion


Re: [Numpy-discussion] just the date part of a datetime64[s]?

2012-02-08 Thread Mark Wiebe
Converting between date and datetime requires caution, because it depends
on your time zone. Because all datetime64's are internally stored in UTC,
simply casting as in your example treats it in UTC. The 'astype' function
does not raise an error to tell you that this is problematic, because
NumPy's default casting for that function has no error policy (yet).

Here's the trouble you can get into:

x = datetime64('2012-02-02 22:00:00', 's')

x.astype('M8[D]')
Out[19]: numpy.datetime64('2012-02-03')


The trouble happens the other way too, because a date is represented as
midnight UTC. This would also raise an exception, but for the fact that
astype does no checking:

x = datetime64('2012-02-02')

x.astype('M8[m]')
Out[23]: numpy.datetime64('2012-02-01T16:00-0800')


The intention is to have functions which handles this casting explicitly,
called datetime_as_date and date_as_datetime. They would take a timezone
parameter, so the code explicitly specifies how the conversion takes place.
A crude replacement for now is:

x = datetime64('2012-02-02 22:00:00', 's')

np.datetime64(np.datetime_as_string(x, timezone='local')[:10])
Out[21]: numpy.datetime64('2012-02-02')


This is hackish, but it should do what you want.

-Mark

On Wed, Feb 8, 2012 at 9:10 AM, John Salvatier jsalv...@u.washington.eduwrote:


 Hello, is there a good way to get just the date part of a datetime64?
 Frequently datetime datatypes have month(), date(), hour(), etc functions
 that pull out part of the datetime, but I didn't see those mentioned in the
 datetime64 docs. Casting to a 'D' dtype didn't work as I would have hoped:

 In [30]: x= datetime64('2012-02-02 09:00:00', 's')

 In [31]: x
 Out[31]: numpy.datetime64('2012-02-02T09:00:00-0800')

 In [32]: x.astype('datetime64[D]').astype('datetime64[s]')
 Out[32]: numpy.datetime64('2012-02-01T16:00:00-0800')

 What's the simplest way to do this?


 ___
 NumPy-Discussion mailing list
 NumPy-Discussion@scipy.org
 http://mail.scipy.org/mailman/listinfo/numpy-discussion


___
NumPy-Discussion mailing list
NumPy-Discussion@scipy.org
http://mail.scipy.org/mailman/listinfo/numpy-discussion