Re: [Numpy-discussion] just the date part of a datetime64[s]?
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]?
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]?
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