将 NominalDiffTime 打印为小时、分钟和秒

Print NominalDiffTime as hours, minutes and seconds

我很惊讶以前没有人问过这个问题,但是...我如何简单地将 NominalDiffTime 打印为小时、分钟和秒? (可能 ,如果恰好那么长...)

由于未知原因,Show 实例打印了总秒数,这显然是无用的。 (13055.22秒是多长时间?是几分钟?一天?半小时?我不知道!)

FormatTime class,但不适用于 NominalDiffTime

您似乎可以使用 floor 方法获取总秒数作为实际的 数字,但是您会用它做什么呢?

据我所知,DiffTime 也没有帮助。

必须有一种方法可以合理地打印持续时间...

您可以通过 TimeOfDay 打印一个 DiffTime -- 它实际上代表一个持续时间,并且很可能是您应该使用的类型。正确掌握 DiffTime 实际上有点棘手;你需要:

floor[1] 为您提供(如您所说)秒数,然后您可以使用 divmod 将其转换为小时、分钟和秒。

例如:

floor ndt `div` 60 -- minutes, which may be more than 59
floor ndt `mod` 60 -- seconds

[1] 与 fromEnum 不同,后者是 "conversion function" 但不转换为秒,这与文档所说的相反。

myFormatDiffTime :: NominalDiffTime -> String
myFormatDiffTime = formatTime defaultTimeLocale "%H:%M:%S" . posixSecondsToUTCTime

time-1.10 formatTime 支持 NominalDiffTime。

formatTime defaultTimeLocale "%H:%M:%S" ndt