У меня есть произведенное использование объекта даты и времени strptime ().
>>> tm
datetime.datetime(2010, 6, 10, 3, 56, 23)
То, что я должен сделать, вокруг минуты к самой близкой 10-й минуте. То, что я делал до этой точки, принимало мелкое значение и использовало вокруг () на ней.
min = round(tm.minute, -1)
Однако как с вышеупомянутым примером, это дает недопустимое время, когда мелкое значение больше, чем 56. т.е.: 3:60
Что лучший путь состоит в том, чтобы сделать это? Дата и время поддерживает это?
если вы не хотите использовать условие, вы можете использовать оператор по модулю
:
minutes = int(round(tm.minute, -1)) % 60
UPDATE
вы хотели что-то подобное?
def timeround10(dt):
a, b = divmod(round(dt.minute, -1), 60)
return '%i:%02i' % ((dt.hour + a) % 24, b)
timeround10(datetime.datetime(2010, 1, 1, 0, 56, 0)) # 0:56
# -> 1:00
timeround10(datetime.datetime(2010, 1, 1, 23, 56, 0)) # 23:56
# -> 0:00
. .Если вы хотите получить результат в виде строки. для получения результата datetime лучше использовать timedelta - см. другие отзывы;)
Это получит 'пол' объекта datetime
, хранящегося в tm, с округлением до 10-минутной отметки перед tm
.
tm = tm - datetime.timedelta(minutes=tm.minute % 10,
seconds=tm.second,
microseconds=tm.microsecond)
Если вы хотите классическое округление до ближайшей 10-минутной отметки, сделайте следующее:
discard = datetime.timedelta(minutes=tm.minute % 10,
seconds=tm.second,
microseconds=tm.microsecond)
tm -= discard
if discard >= datetime.timedelta(minutes=5):
tm += datetime.timedelta(minutes=10)
или так:
tm += datetime.timedelta(minutes=5)
tm -= datetime.timedelta(minutes=tm.minute % 10,
seconds=tm.second,
microseconds=tm.microsecond)