15

如何使用 numpy datetime64 获取当前日期和时间?

给定一个 numpy 数组,其中每个元素都是 datetime64 值,我如何获得以秒为单位的差异?

4

4 回答 4

14

您也可以这样做来获取当前日期和时间:

import numpy as np 

np.datetime64('today') # today's date
np.datetime64('now') # timestamp right now 
于 2017-06-17T07:51:02.053 回答
6

您可以使用 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]

解释:

  1. current 首先使用 datetime 模块设置为当前时间。
  2. 创建了一个包含 np.datetime64 元素的示例数组
  3. np.timedelta64 元素是通过从当前时间中减去样本中的每个元素来计算的。
  4. 对于 diff 中的每个 timedelta,提取第二个差异并将其保存在新数组 diffSec 中

显然,这些确切的结果是不可重现的,因为我使用当前时间来计算差异。

于 2013-10-19T02:39:17.880 回答
0

假设您要计算数组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结构来扫描数组。它会通过阻止矢量化来降低效率。

于 2014-12-28T09:11:05.080 回答
0

在指定的时间最后提供 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
于 2016-12-22T07:24:12.137 回答