【问题标题】:how to get 20 mins before the last 10th minute如何在最后 10 分钟前获得 20 分钟
【发布时间】:2018-10-18 03:16:35
【问题描述】:

所以我需要在最后 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'

我做错了什么?

【问题讨论】:

    标签: python python-3.x datetime timedelta


    【解决方案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)
    

    【讨论】:

      【解决方案2】:

      导入问题在于datetime.timedelta。因为你像from datetime import datetime, timedelta 一样导入,所以下面代码中的datetime 实际上是datetime.datetime 类。

      有两种解决方案:要么将datetime.timedelta 更改为timedelta,要么将导入方式更改为import datetime,然后将代码中的datetime 更改为datetime.datetime。我会推荐第一个,因为它更简单。

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

      【讨论】:

        猜你喜欢
        • 2016-09-28
        • 1970-01-01
        • 2020-04-25
        • 1970-01-01
        • 2022-01-11
        • 2023-03-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多