【问题标题】:Calculating the datetime of X amount of seconds before计算 X 秒前的日期时间
【发布时间】:2021-05-30 21:52:17
【问题描述】:

我正在尝试编写一个函数,在该函数中计算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]

【问题讨论】:

    标签: python numpy datetime timedelta


    【解决方案1】:

    90 秒不是日期或时间(因此不是np.datetime64)- 它是一个时间周期,因此是np.timedelta64。这里是np.array([90, 150, 3600], 'm')means timedelta64中的'm'

    >>> given_date = np.datetime64('2017-09-15 11:40:30')
    >>> previous_dates = np.array([90, 150, 3600], 'm') # 'm' means `timedelta64`
    >>> previous_dates
    array([  90,  150, 3600], 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]')
    

    【讨论】:

      【解决方案2】:

      @forcebru 给出的解决方案很好用,我只想在这里指出两点:

      import numpy as np
      
      given_date = np.datetime64('2017-09-15 11:40:30')
      previous_dates = np.array([90, 150, 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的分配并直接打印)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-22
        • 1970-01-01
        • 2016-08-14
        • 1970-01-01
        • 1970-01-01
        • 2016-05-30
        相关资源
        最近更新 更多