如何使用 numpy datetime64 获取当前日期和时间?
给定一个 numpy 数组,其中每个元素都是 datetime64 值,我如何获得以秒为单位的差异?
您也可以这样做来获取当前日期和时间:
import numpy as np
np.datetime64('today') # today's date
np.datetime64('now') # timestamp right now
您可以使用 datetime 模块获取当前日期并将其传递给 datetime64
import numpy as np
import datetime
current = np.datetime64(datetime.datetime.now())
现在您有了当前的日期时间,我建议您查看numpy datetime64 文档并按照提供的示例进行操作。timedelta64 上的示例应该特别有用。
对于一个具体的例子,请考虑以下内容:
import numpy as np
import datetime
current = np.datetime64(datetime.datetime.now())
sample = [np.datetime64('2013-10-22T03:30Z'),
np.datetime64('2013-10-22T04:40Z'),
np.datetime64('2013-10-22T05:50Z')]
diff = [current-t for t in sample]
diffSec = [t.item().seconds for t in diff]
此代码导致 diffSec 数组包含从当前时间到采样时间的秒数差异
Out[2]: [1723, 1818, 1913]
解释:
显然,这些确切的结果是不可重现的,因为我使用当前时间来计算差异。
假设您要计算数组t1
和标量之间的差异t0
(它们可以是数组或标量):
In [1]: import numpy as np
In [2]: t1=np.arange('2001-01-01T00:00', '2001-01-01T00:05', dtype='datetime64')
In [3]: t1
Out[3]:
array(['2001-01-01T00:00-0200', '2001-01-01T00:01-0200',
'2001-01-01T00:02-0200', '2001-01-01T00:03-0200',
'2001-01-01T00:04-0200'], dtype='datetime64[m]')
In [4]: t0=np.datetime64('2001-01-01T00:00:00')
In [5]: t0
Out[5]: numpy.datetime64('2001-01-01T00:00:00-0200')
在 numpy 中计算时间差的最佳方法是使用 timedelta64。在上面的示例中,t0
以分钟t1
为单位,以秒为单位。在计算时间差时,它们都将转换为较小的单位(秒)。你只需要减去它们来创建一个 timedelta64 对象:
In [6]: t1-t0
Out[6]: array([ 0, 60, 120, 180, 240], dtype='timedelta64[s]')
如果您希望以数字格式响应,请执行
In [7]: (t1-t0).astype('int')
Out[7]: array([ 0, 60, 120, 180, 240])
请注意,我从未使用该for
结构来扫描数组。它会通过阻止矢量化来降低效率。
在指定的时间最后提供 Z 是 Zulu 格式的时间。这在 python numpy 库中已被弃用。(Github 上的问题:https ://github.com/pandas-dev/pandas/issues/12100 )。
In [1]: import numpy as np
In [2]: import datetime
对于当前日期,您可以使用:
In [3]: current = np.datetime64(datetime.datetime.now())
如果您尝试根据您的时区更改时间,例如:
In [3]: previous_date = np.datetime64('2011-01-01T00:00:00-0530')
或者
In [3]: previous_date = np.datetime64('2011-01-01T00:00:00Z')
那么你会得到一个 DeprecationWarning。如果您正在使用已弃用的版本,则可以使用以下代码
In [3]: delta = np.timedelta64(5,'h')
In [4}: previous_date = np.datetime64('2011-01-01T00:00:00') + delta