как получить 20 минут до последней 10-й минуты - PullRequest
0 голосов
/ 18 октября 2018

Так что мне нужно рассчитать за 20 минут до последних 10 минут.Например, если сейчас 13:07, мне нужно время 12: 40

Итак, из моего исследования я думаю, что мне нужно найти последнюю 10-ю (или 0-ю) минуту часа, затем минус 20 минут отчто.

Я нашел ответ на поиск следующей 10-й минуты

, поэтому я изменил код, чтобы найти последнюю 10-ю минуту, а затем просто "- datetime.timedelta(минут = 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 голосов
/ 18 октября 2018

Проблема с импортом datetime.timedelta.Когда вы импортируете как from datetime import datetime, timedelta, datetime в следующем коде на самом деле datetime.datetime class.

Существует два решения: либо вы меняете datetime.timedelta на timedelta, либо вы меняетекак вы импортируете в import datetime, а затем измените datetime в вашем коде на datetime.datetime.Я бы порекомендовал первый, так как он проще.

Тот факт, что пакет datetime и класс datetime имеют одно и то же имя, усложняет задачу.Вы должны быть осторожны и точно знать, что есть что.

0 голосов
/ 18 октября 2018

Есть 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)
...