Как к раунду минута даты и времени возражают Python

У меня есть произведенное использование объекта даты и времени strptime ().

>>> tm
datetime.datetime(2010, 6, 10, 3, 56, 23)

То, что я должен сделать, вокруг минуты к самой близкой 10-й минуте. То, что я делал до этой точки, принимало мелкое значение и использовало вокруг () на ней.

min = round(tm.minute, -1)

Однако как с вышеупомянутым примером, это дает недопустимое время, когда мелкое значение больше, чем 56. т.е.: 3:60

Что лучший путь состоит в том, чтобы сделать это? Дата и время поддерживает это?

86
задан Lucas Manco 12 August 2010 в 00:45
поделиться

2 ответа

если вы не хотите использовать условие, вы можете использовать оператор по модулю :

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 - см. другие отзывы;)

3
ответ дан 24 November 2019 в 07:58
поделиться

Это получит 'пол' объекта 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)
119
ответ дан 24 November 2019 в 07:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: