将 NominalDiffTime 打印为小时、分钟和秒
Print NominalDiffTime as hours, minutes and seconds
我很惊讶以前没有人问过这个问题,但是...我如何简单地将 NominalDiffTime
打印为小时、分钟和秒? (可能 天 ,如果恰好那么长...)
由于未知原因,Show
实例打印了总秒数,这显然是无用的。 (13055.22秒是多长时间?是几分钟?一天?半小时?我不知道!)
有 FormatTime
class,但不适用于 NominalDiffTime
。
您似乎可以使用 floor
方法获取总秒数作为实际的 数字,但是您会用它做什么呢?
据我所知,DiffTime
也没有帮助。
必须有一种方法可以合理地打印持续时间...
您可以通过 TimeOfDay
打印一个 DiffTime
-- 它实际上代表一个持续时间,并且很可能是您应该使用的类型。正确掌握 DiffTime
实际上有点棘手;你需要:
- 闰秒table。 type documentation, a page with a leap second table;您会希望有一种方法让您的程序在运行时读取它,因为它们每隔几个月就会发生变化。
- 从那里,您可以使用
utcToTAITime
转换为 AbsoluteTime
,并且
diffAbsoluteTime
得到 DiffTime
,
timeToTimeOfDay
让图书馆为您做 divmod,最后
formatTime
打印这个。
floor
[1] 为您提供(如您所说)秒数,然后您可以使用 div
和 mod
将其转换为小时、分钟和秒。
例如:
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
我很惊讶以前没有人问过这个问题,但是...我如何简单地将 NominalDiffTime
打印为小时、分钟和秒? (可能 天 ,如果恰好那么长...)
由于未知原因,Show
实例打印了总秒数,这显然是无用的。 (13055.22秒是多长时间?是几分钟?一天?半小时?我不知道!)
有 FormatTime
class,但不适用于 NominalDiffTime
。
您似乎可以使用 floor
方法获取总秒数作为实际的 数字,但是您会用它做什么呢?
据我所知,DiffTime
也没有帮助。
必须有一种方法可以合理地打印持续时间...
您可以通过 TimeOfDay
打印一个 DiffTime
-- 它实际上代表一个持续时间,并且很可能是您应该使用的类型。正确掌握 DiffTime
实际上有点棘手;你需要:
- 闰秒table。 type documentation, a page with a leap second table;您会希望有一种方法让您的程序在运行时读取它,因为它们每隔几个月就会发生变化。
- 从那里,您可以使用
utcToTAITime
转换为AbsoluteTime
,并且 diffAbsoluteTime
得到DiffTime
,timeToTimeOfDay
让图书馆为您做 divmod,最后formatTime
打印这个。
floor
[1] 为您提供(如您所说)秒数,然后您可以使用 div
和 mod
将其转换为小时、分钟和秒。
例如:
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