entiendo que segundos y microsegundos probablemente están representados por separado en datetime.timedelta
por razones de eficiencia, pero que acabo de escribir esta función simple:Falta datetime.timedelta.to_seconds() -> float en Python?
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
Esto es útil para cosas como pasar un valor a time.sleep
o select.select
. ¿Por qué no es algo así como esta parte de la interfaz datetime.timedelta
? Me puede faltar un caso de esquina. La representación del tiempo parece tener tantos casos de esquina no obvios ...
Rechacé días para obtener una toma razonable con cierta precisión (soy demasiado vago para calcular el cajero automático matemático, así que esto parece un compromiso razonable ;-).
¿Cuál es la pregunta? –
Envalentonado, preguntándose si hay una razón por la que no está incluido en la interfaz. – cdleary
Esto parece ser un duplicado de https://stackoverflow.com/questions/21414639/convert-timedelta-to-floating-point que tiene una mejor respuesta. – outofculture