如何在最后10分钟之前获得20分钟

时间:2018-10-18 03:16:36

标签: python python-3.x datetime timedelta

所以我需要计算最近10分钟之前的20分钟。 EG,如果现在是13:07,我需要的时间是12:40

因此,根据我的研究,我认为我需要找到每小时的最后10分钟(或第0分钟),然后再减去20分钟。

I found an answer to finding the next 10th minute

所以我调整了代码以找到最后10分钟,然后简单地输入了“-datetime.timedelta(minutes = 20)”

import math
from datetime import datetime, timedelta

def ceil_dt(dt, delta):
    return datetime.min + math.ceil((dt - datetime.min) / delta) * delta

print(ceil_dt(datetime(2012, 10, 25, 17, 2, 16), timedelta(minutes=-10))) - datetime.timedelta(minutes=20)

但这给了我以下异常

2012-10-25 17:00:00
Traceback (most recent call last):
  File "F:/Pythong/test", line 7, in <module>
    print(ceil_dt(datetime(2012, 10, 25, 17, 2, 16), timedelta(minutes=-10))) - datetime.timedelta(minutes=20)
AttributeError: type object 'datetime.datetime' has no attribute 'timedelta'

我做错了什么?

2 个答案:

答案 0 :(得分:1)

您的代码有2个问题。首先,您应该import timedelta,然后直接致电datetime.timedelta,然后致电timedelta。其次,您对print的近括号放错了位置。这样就可以了:

ceil_dt(datetime(2012, 10, 25, 17, 2, 16), timedelta(minutes=-10)) - timedelta(minutes=20)

但是您可以使用:

dt = datetime(2012, 10, 25, 17, 2, 16)
res = dt - timedelta(minutes=dt.minute+20)

答案 1 :(得分:1)

导入问题与datetime.timedelta有关。当您像from datetime import datetime, timedelta一样导入时,以下代码中的datetime实际上是datetime.datetime类。

有两种解决方案:将datetime.timedelta更改为timedelta,或者将导入方式更改为import datetime,然后将代码中的datetime更改为{ {1}}。我建议第一个比较简单。

datetime.datetime包和datetime类具有相同名称的事实使事情变得有些复杂。您需要小心并确切知道哪个。