缺少datetime.timedelta.to_seconds() - >在Python中浮动?

cdl*_*ary 9 python datetime timedelta

据我所知,datetime.timedelta由于效率原因,秒和微秒可能是单独表示的,但我只是写了这个简单的函数:

def to_seconds_float(timedelta):
    """Calculate floating point representation of combined
    seconds/microseconds attributes in :param:`timedelta`.

    :raise ValueError: If :param:`timedelta.days` is truthy.

        >>> to_seconds_float(datetime.timedelta(seconds=1, milliseconds=500))
        1.5
        >>> too_big = datetime.timedelta(days=1, seconds=12)
        >>> to_seconds_float(too_big) # doctest: +ELLIPSIS
        Traceback (most recent call last):
        ...
        ValueError: ('Must not have days', datetime.timedelta(1, 12))
    """
    if timedelta.days:
        raise ValueError('Must not have days', timedelta)
    return timedelta.seconds + timedelta.microseconds / 1E6
Run Code Online (Sandbox Code Playgroud)

这对于将值传递给time.sleep或者很有用select.select.为什么这个datetime.timedelta界面不是这样的?我可能会错过一些角落案例.时间表示似乎有这么多非明显的角落案例......

我拒绝了几天准确地进行了一次合理的拍摄(我太懒了,实际上算不上数学ATM,所以这似乎是一个合理的妥协;-).

Ale*_*lli 12

Python float有大约15位有效数字,所以秒数高达86400(小数点左边5位数)和微秒需要6位数,你可以很好地包括几天(最多几年的价值)而不会丢失精确.

一个很好的口头禅是"pi秒是一个nanocentury" - 每100年大约3.14E9秒,即每年3E7,所以每年3E13微秒.口头禅是好的,因为它令人难忘,即使它确实需要你之后做一点心算(但是,像菠菜一样,它对你来说很好 - 让你保持敏捷和警觉! - ).

设计哲学datetime有点极简主义,所以它省略了许多可能的辅助方法,这些方法归结为简单的算术表达式并不奇怪.