如何将UTCTime / NominalDiffTime格式化为人类可读的表示?

时间:2017-10-05 09:11:26

标签: haskell

我已经尝试过google搜索但是很难找到一个具体的例子,或者我应该使用哪些库。

我想格式化NominalDiffTimeNominalDiffTime)类型的值,例如格式为05/10/2017 10:10AM

2 个答案:

答案 0 :(得分:5)

想出来。我认为由于类型别名存在一些混淆:type POSIXTime = NominalDiffTimehttps://hackage.haskell.org/package/time-1.8.0.3/docs/Data-Time-Clock-POSIX.html#t:POSIXTime)。

import Data.Time.Clock
import Data.Time.Format
import Data.Time.Clock.POSIX

myFormatUtcTime :: UTCTime -> String
myFormatUtcTime = formatTime defaultTimeLocale "%H:%M %d/%m/%Y"

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

答案 1 :(得分:3)

我建议fmt库进行时间格式化。

  1. 有时候人们可读的函数名称而不是一些奇怪的格式符号。
  2. 它不仅可以格式化时间。
  3. 此处示例:

    ghci> import Data.Time (getZonedTime)
    ghci> import Fmt.Time (dateDashF, dateSlashF)
    ghci> t <- getZonedTime 
    ghci> t
    2017-10-05 14:53:08.818531 MSK
    it :: ZonedTime
    ghci> dateDashF t
    "2017-10-05"
    it :: Data.Text.Internal.Builder.Builder 
    ghci> dateSlashF t
    "10/05/17"
    it :: Data.Text.Internal.Builder.Builder