Estoy tratando de escribir un código para dormir hasta el comienzo del próximo minuto en la zona horaria local, pero estoy teniendo una gran dificultad para hacerlo. La biblioteca time
siempre ha sido uno de mis puntos débiles, así que supongo que hay una manera fácil de hacerlo.Dormir hasta el comienzo del próximo minuto
Pensé en solo computar un nuevo TimeOfDay, pero eso no manejaría 23:59 a 00:00, y presumiblemente haría cosas muy confusas con el cambio de horario de verano.
Manejar segundos interminables sería una buena bonificación también.
Utilizar Control.Concurrent.threadDelay para dormir me parece el método más simple, por lo que una pregunta alternativa sería: ¿Cómo puedo obtener el número de microsegundos hasta el comienzo del próximo minuto? DiffTime
y NominalDiffTime
serían formas perfectamente aceptables de lograr esto.
¿Podría obtener segundos componentes de la hora actual y luego dormir (60 segundos)? Con segundos de diferencia, eso debería funcionar razonablemente bien. ¿Qué tan preciso es el despertar? –
Eso funcionaría si realmente no hay otra manera de hacerlo sin un cálculo completamente manual, pero sería una pena perder la mayor precisión que podía obtener con los mismos datos. Aunque no es un gran problema; estar un segundo o así tarde no es un problema, pero definitivamente me gustaría evitar despertar * antes de * que comience el próximo minuto - el error que produce solo se corregirá al minuto siguiente. Es cierto que los segundos intercalares no son muy comunes. – ehird
Hmm, la documentación para 'UTCTime' parece implicar que los segundos intercalares no son manejados por las acciones de medición como' getCurrentTime', por lo que sería una solución aceptable después de todo; el campo de segundos en realidad está dado con precisión de picosegundo, por lo que daría la mejor precisión que podría esperar. Lo probaré. – ehird