如何從numpy.datetime64或numpy.datetime_獲取UNIX時間?如何從numpy.datetime64獲取unix時間戳
正如例如:
np.datetime_('2012-08-08 13:37:00')
如何從numpy.datetime64或numpy.datetime_獲取UNIX時間?如何從numpy.datetime64獲取unix時間戳
正如例如:
np.datetime_('2012-08-08 13:37:00')
對於numpy 1.6.1與1.7,我得到np.datetime64('now')
的值的結果不一致。
這適用於以下兩者:
>>> import datetime
>>> import numpy as np
>>> now = np.datetime64(datetime.datetime.now())
>>> (now.astype('uint64')/1e6).astype('uint32')
1344447810
def get_unixtime(time):
return (time.astype(np.int64)/1e6).astype(np.int64)
get_unixtime(np.datetime64('now'))
似乎回到了UNIX時間戳,我只用了幾個日期檢查。
numpy的datetime64具有可變的單元:
從official doc提取:
用於內部存儲的單元自動地從所述串的形式選擇,並且可以是日期單位或時間單位。日期單位是年('Y'),月('M'),星期('W')和日期('D'),而時間單位是小時('h'),分鐘('m' ),秒('s'),毫秒('ms')和一些額外的SI前綴以秒爲單位。
所以,首先我們需要使用D型檢查當前的單位,例如:
>>> now = np.datetime64(datetime.datetime.now())
>>> now.dtype
# for ns unit, use:
dtype('<M8[ns]')
now.astype('int64')/1e9, dtype='int32'
# for us unit, use:
dtype('<M8[us]')
now.astype('int64')/1e6, dtype='int32'
# for ms unit, use:
dtype('<M8[ms]')
now.astype('int64')/1e3, dtype='int32'
等等....
爲了佔單位,我想你需要做的是這樣的:
def get_unixtime(dt64):
return dt64.astype('datetime64[s]').astype('int')
注意,將其轉換爲「秒」(在[s]
)轉換成整數之前秒。這適用於NumPy 1.12.1。
根據文檔datetime64在[numpy 1.6]中不是很可靠(http://docs.scipy.org/doc/numpy/reference/arrays.datetime.html#differences-between-1-6-and- 1-7-日期時間)。即使是1.7,api也是實驗性的。所以我不確定,如果你會在不同的平臺和體系結構(64位?)上獲得一致的結果。有關更多信息,請參閱[pandas 0.8發行說明](http://pandas.pydata.org/pandas-docs/dev/whatsnew.html#potential-porting-issues-for-pandas-0-7-3-用戶)。所以不確定,如果在numpy 1.6上使用datetime64是個不錯的選擇。 – bmu 2012-08-08 16:49:43
是啊,因爲代碼本身將是實驗性的,只能駐留在一臺機器上,如果它一次正常工作,它可以被認爲是可行的? – SlimJim 2012-08-08 21:22:50
好的,但你應該在你的問題中指定numpy的版本,平臺和體系結構(也許是Python版本,2和3的結果相同?)。否則可能會導致讀者誤解。 – bmu 2012-08-09 08:47:22