我正在尝试编写一些代码,直到本地时区的下一分钟开始,但是我很难这样做.该time库一直是我的弱点之一,因此我假设有一些简单的方法来做到这一点.
我想过只计算一个新的TimeOfDay,但这不会处理23:59到00:00,并且可能会在夏令时切换时做很混乱的事情.
处理闰秒也是一个很好的奖励.
使用Control.Concurrent.threadDelay进行睡眠对我来说似乎是最简单的方法,所以另一个问题是:如何在下一分钟开始之前获得微秒数?DiffTime并且NominalDiffTime将是完全可以接受的方式来实现这一点.
Ant*_*ony 10
我担心这可能不是你想要的,因为你后来的评论.我认为这可以容忍闰年,时区变化和日期变化,但不是闰秒.
import Control.Concurrent (threadDelay)
import Data.Time.Clock
sleepToNextMinute :: IO ()
sleepToNextMinute = do t <- getCurrentTime
let secs = round (realToFrac $ utctDayTime t) `rem` 60
threadDelay $ 1000000 * (60 - secs)
main = do putStrLn "Starting..."
sleepToNextMinute
putStrLn "Minute 1"
sleepToNextMinute
putStrLn "Minute 2"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2953 次 |
| 最近记录: |