我知道出于效率原因,秒和微秒可能在 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
这对于将值传递给 time.sleep
或 select.select
之类的事情很有用。 为什么 datetime.timedelta
界面中没有像这一部分这样的东西?我可能遗漏了一些特殊情况。时间表示似乎有很多不明显的极端情况......
我拒绝了几天的时间来以一定的精度进行合理的拍摄(我懒得实际计算数学 ATM,所以这似乎是一个合理的妥协 ;-)。
最佳答案
Python float 大约有 15 位有效数字,因此秒最多为 86400(小数点左侧 5 位),微秒需要 6 位,您可以包括天数(最多数年的值)不损失精度。
一个很好的口头禅是“pi 秒是一个纳世纪”——大约每 100 年 3.14E9 秒,即每年 3E7,所以每年 3E13 微秒。咒语很好,因为它令人难忘,尽管它确实需要您事后做一些心算(但是,就像菠菜一样,它对您有好处 -- 让您保持敏捷和警觉!-)。
datetime
的设计理念有点极简主义,因此它省略了许多可以归结为简单算术表达式的可能辅助方法也就不足为奇了。
关于python - 缺少 datetime.timedelta.to_seconds() -> 在 Python 中 float ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1083402/