Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>To convert <code>numpy.datetime64</code> to datetime object that represents time in UTC on <code>numpy-1.8</code>:</p> <pre><code>&gt;&gt;&gt; from datetime import datetime &gt;&gt;&gt; import numpy as np &gt;&gt;&gt; dt = datetime.utcnow() &gt;&gt;&gt; dt datetime.datetime(2012, 12, 4, 19, 51, 25, 362455) &gt;&gt;&gt; dt64 = np.datetime64(dt) &gt;&gt;&gt; ts = (dt64 - np.datetime64('1970-01-01T00:00:00Z')) / np.timedelta64(1, 's') &gt;&gt;&gt; ts 1354650685.3624549 &gt;&gt;&gt; datetime.utcfromtimestamp(ts) datetime.datetime(2012, 12, 4, 19, 51, 25, 362455) &gt;&gt;&gt; np.__version__ '1.8.0.dev-7b75899' </code></pre> <p>The above example assumes that a naive datetime object is interpreted by <code>np.datetime64</code> as time in UTC.</p> <hr> <p>To convert datetime to np.datetime64 and back (<code>numpy-1.6</code>):</p> <pre><code>&gt;&gt;&gt; np.datetime64(datetime.utcnow()).astype(datetime) datetime.datetime(2012, 12, 4, 13, 34, 52, 827542) </code></pre> <p>It works both on a single np.datetime64 object and a numpy array of np.datetime64.</p> <p>Think of np.datetime64 the same way you would about np.int8, np.int16, etc and apply the same methods to convert beetween Python objects such as int, datetime and corresponding numpy objects.</p> <p>Your "nasty example" works correctly:</p> <pre><code>&gt;&gt;&gt; from datetime import datetime &gt;&gt;&gt; import numpy &gt;&gt;&gt; numpy.datetime64('2002-06-28T01:00:00.000000000+0100').astype(datetime) datetime.datetime(2002, 6, 28, 0, 0) &gt;&gt;&gt; numpy.__version__ '1.6.2' # current version available via pip install numpy </code></pre> <p>I can reproduce the <code>long</code> value on <code>numpy-1.8.0</code> installed as:</p> <pre><code>pip install git+https://github.com/numpy/numpy.git#egg=numpy-dev </code></pre> <p>The same example:</p> <pre><code>&gt;&gt;&gt; from datetime import datetime &gt;&gt;&gt; import numpy &gt;&gt;&gt; numpy.datetime64('2002-06-28T01:00:00.000000000+0100').astype(datetime) 1025222400000000000L &gt;&gt;&gt; numpy.__version__ '1.8.0.dev-7b75899' </code></pre> <p>It returns <code>long</code> because for <code>numpy.datetime64</code> type <code>.astype(datetime)</code> is equivalent to <code>.astype(object)</code> that returns Python integer (<code>long</code>) on <code>numpy-1.8</code>. </p> <p>To get datetime object you could:</p> <pre><code>&gt;&gt;&gt; dt64.dtype dtype('&lt;M8[ns]') &gt;&gt;&gt; ns = 1e-9 # number of seconds in a nanosecond &gt;&gt;&gt; datetime.utcfromtimestamp(dt64.astype(int) * ns) datetime.datetime(2002, 6, 28, 0, 0) </code></pre> <p>To get datetime64 that uses seconds directly:</p> <pre><code>&gt;&gt;&gt; dt64 = numpy.datetime64('2002-06-28T01:00:00.000000000+0100', 's') &gt;&gt;&gt; dt64.dtype dtype('&lt;M8[s]') &gt;&gt;&gt; datetime.utcfromtimestamp(dt64.astype(int)) datetime.datetime(2002, 6, 28, 0, 0) </code></pre> <p>The <a href="http://docs.scipy.org/doc/numpy-dev/reference/arrays.datetime.html">numpy docs</a> say that the datetime API is experimental and may change in future numpy versions.</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload