如何解决计算 X 秒之前的日期时间
我正在尝试编写一个函数,它计算 given_date
之前 x 秒的日期间隔。 previouse_dates
的每个索引都是 given_date
之前的时间(以秒为单位)。
import numpy as np
given_date = np.datetime64('2017-09-15 11:40:30')
previouse_dates= np.datetime64([90,150,3600]) #in seconds
预期输出
[2017-09-15 11:39:00 2017-09-15 11:38:00 2017-09-15 10:40:30]
解决方法
90 秒不是日期或时间(因此不是 np.datetime64
) - 它是时间 周期,因此是 np.timedelta64
。 'm'
means timedelta64
中的 np.array([90,150,3600],'m')
:
>>> given_date = np.datetime64('2017-09-15 11:40:30')
>>> previous_dates = np.array([90,'m') # 'm' means `timedelta64`
>>> previous_dates
array([ 90,dtype=timedelta64)
>>> given_date - previous_dates
array(['2017-09-15T11:39:00','2017-09-15T11:38:00','2017-09-15T10:40:30'],dtype='datetime64[s]')
,
@forcebru 给出的解决方案工作得很好,我只是想在这里指出另外两件事:
import numpy as np
given_date = np.datetime64('2017-09-15 11:40:30')
previous_dates = np.array([90,3600]) # since it's just seconds,no 'm' needed
print(given_date - previous_dates) # @forcebru solution still works
# you just subtract seconds,so that works,but if you'd want to do something else
fdates = np.vectorize(lambda d: given_date - np.timedelta64(d,'s'))
result = fdates(previous_dates)
print(result)
第二部分给你相同的结果,但当然你可以在 lambda 中做不同的,或者稍微复杂的事情。
由于您只是在减去秒数,因此您也可以使用更简单的解决方案,甚至不需要 'm'
指示,因为从时间中减去时,整数将被解释为秒数。
而且由于您通常不想(也不应该)保留 lambda,因此您可以保存一行:
result = np.vectorize(lambda d: given_date - np.timedelta64(d,'s'))(previous_dates)
print(result)
(当然,甚至可以直接跳过 result
的作业并直接打印)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。