Haskell:如何使用Data.Time将分钟添加到当前时间?

时间:2016-10-02 09:46:12

标签: haskell time clock

我想在给定的时间内添加/减去指定的分钟数并找出结果时间。

e.g。假设给定时间是上午11:30,添加的分钟数是100,那么结果时间是01:10 PM

如何使用Data-Time库在Haskell中执行此操作?我试过阅读the docs on the Haskell site,但几乎找不到任何东西。

该文档站点上没有显示示例。此外,cookbook on the Haskell site不包含任何时间计算示例。

编辑:不需要当前时间,它应该适用于任何给定的时间。时间可以像“11:30”这样的字符串给出。

2 个答案:

答案 0 :(得分:7)

添加100分钟的示例演示:

λ> import Data.Time
λ> currentTime <- getCurrentTime
λ> currentTime
2016-10-02 10:27:03.30961 UTC
λ> currentZone <- getCurrentTimeZone
λ> currentZone
IST
λ> utcToLocalTime currentZone currentTime
2016-10-02 15:57:03.30961
λ> let hundredMinutes = 100 * 60
λ> addUTCTime hundredMinutes currentTime
2016-10-02 12:07:03.30961 UTC
λ> let newTime = addUTCTime hundredMinutes currentTime
λ> utcToLocalTime currentZone newTime
2016-10-02 17:37:03.30961

addUTCTime功能用于添加100分钟。 也可以使用等效函数for subtracting

答案 1 :(得分:0)

您可以使用Data.Time.Clock.getCurrentTime来获取当前时间。这将返回IO UTCTime

然后,您可以使用Data.Time.Clock.addUTCTime为之前提取的时间添加分钟数。

import Data.Time

currentTimePlusMinutes minutes = getCurrentTime 
  >>= (\time -> return (addUTCTime (minutes * 60) time))

如果您不想使用当前时间,则可以直接执行

 addMinutes :: NominalDiffTime -> UTCTime -> UTCTime
 addMinutes minutes = addUTCTime (minutes * 60)

 λ> addMinutes 10 time
 2016-10-02 12:41:09.68297 UTC