这是不久前the one I asked的后续问题。
我在Haskell网站上找不到一个例子(抱歉我的Google技能),该网站展示了如何使用Data.Time
函数将格式化的String
转换为UTCTime
和然后可以从中添加/减去分钟/秒,并将UTCTime
转换回格式化的String
。
我正在寻找一个示例,展示如何转换String
(例如像"10:20:30"
到UTCTime
然后再添加1000秒。如何使用Haskell Data.Time
库根本不使用IO?
函数的类型应为FormatTime -> String -> UTCTime
。
该函数应使用TimeLocale
或FormatTime
作为区域设置/格式设置。
库中有如此多的功能,它们只是令人困惑的类型。 readTime
,TimeLocale
,ParseTime t
,NominalDiffTime
,Time
等等。
请不要只指向the Haskell site上的文档。大多数文档只是源代码中的类型签名转储,几乎没有任何示例。很抱歉,如果这是咆哮,但我花了很多时间试图从这些文档中找出一些东西。
按时与Python docs进行比较。这么多漂亮的例子。 感谢上帝,有SO。
答案 0 :(得分:5)
import Data.Time
timeFormat = "%H:%M:%S"
understandTime = parseTimeOrError True defaultTimeLocale timeFormat
time :: UTCTime
time = understandTime "10:30:20"
λ> time
1970-01-01 10:30:20 UTC
让我们分解正在发生的事情:
timeFormat
只是一个字符串,描述了我们如何期望将时间传递给我们。parseTimeOrError
,使用defaultTimeLocale
作为语言环境,之前已定义timeFormat
作为预期格式。understandTime
函数,可以将String
作为时间。使用它时,我们需要将预期的输出类型显式设置为UTCTime
(这是time :: UTCTime
的作用)。如果我们在已经期望understandTime
的函数的上下文中使用UTCTime
,则这是不必要的(例如addUTCTime 1000 (understandTime "10:30:20")
)time
。请注意,年,日,月和时区默认为1970-01-01和UTC,因为我们未在timeFormat
中明确阅读它们。