python - 缺少 datetime.timedelta.to_seconds() -> 在 Python 中 float ?

标签 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

这对于将值传递给 time.sleepselect.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/

相关文章:

python - 使用 tkinter 在单个窗口中将多个框架与小部件组合在一起

python - 使用 loc 时 Pandas SettingWithCopyWarning

java - 在 Java 中创建具有偏移量的 Date 对象

MySQL 日期时间 : insert a date with timezone offset

datetime - Javascript转换时间以在Windows和Linux之间获得不同

python - 将连续时间差 (timedelta) 转换为秒

python - 在 C 中解析一个字符串并将其保存到一个结构数组中

python - 如何在最后 10 分钟前获得 20 分钟

python - 使用 timedelta 时小数位太多

python - 需要帮助为我的字符串模式找到正确的正则表达式模式