将timedelta舍入到最近的15分钟

时间:2017-02-17 13:34:06

标签: python django

我有一个timedelta,我想绕到最近的15分钟。例如,8小时40分钟将向上舍入到8小时45米,8小时50米将向下舍入到8小时45米。

实现这一目标的最佳方式是什么?

1 个答案:

答案 0 :(得分:2)

我最终创建了自己的解决方案,因为我没有找到另一种方式

def round_timedelta(td, period):
    """
    Rounds the given timedelta by the given timedelta period
    :param td: `timedelta` to round
    :param period: `timedelta` period to round by.
    """
    period_seconds = period.total_seconds()
    half_period_seconds = period_seconds / 2
    remainder = td.total_seconds() % period_seconds
    if remainder >= half_period_seconds:
        return timedelta(seconds=td.total_seconds() + (period_seconds - remainder))
    else:
        return timedelta(seconds=td.total_seconds() - remainder)

在iPython中使用:

In [4]: print round_timedelta(timedelta(hours=1, minutes=27), timedelta(minutes=15))
1:30:00

In [5]: print round_timedelta(timedelta(hours=1, minutes=30), timedelta(minutes=15))
1:30:00

In [6]: print round_timedelta(timedelta(hours=1, minutes=31), timedelta(minutes=15))
1:30:00

In [7]: print round_timedelta(timedelta(hours=1, minutes=37), timedelta(minutes=15))
1:30:00

In [8]: print round_timedelta(timedelta(hours=1, minutes=38), timedelta(minutes=15))
1:45:00