【问题标题】:Print NominalDiffTime as hours, minutes and seconds将 NominalDiffTime 打印为小时、分钟和秒
【发布时间】:2015-06-27 09:04:33
【问题描述】:

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

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

FormatTime 类,但不适用于NominalDiffTime

您似乎可以使用floor 方法将总秒数作为实际的数字,但是您如何处理它呢?

据我所知,DiffTime 也无济于事。

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

【问题讨论】:

    标签: haskell time formatting


    【解决方案1】:

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

    【讨论】:

    • 请注意,这仅适用于不到一天的DiffTimes,如果超过一天,timeToTimeOfDay 会将额外时间添加为闰秒。该问题询问了一个也可以使用数天的解决方案。
    【解决方案2】:

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

    例如:

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

    [1] 与fromEnum 不同,fromEnum 是一个“转换函数”,但不会转换为秒,这与文档所说的相反。

    【讨论】:

      【解决方案3】:
      myFormatDiffTime :: NominalDiffTime -> String
      myFormatDiffTime = formatTime defaultTimeLocale "%H:%M:%S" . posixSecondsToUTCTime
      

      【讨论】:

        【解决方案4】:

        time-1.10 具有对 NominalDiffTime 的 formatTime 支持。

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-06-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多