[Haskell-beginners] Date Time in Haskell

Dananji Liyanage dan9131 at gmail.com
Thu May 14 10:57:46 UTC 2015


Hi Kostiantyn,

Thanks for introducing me to package "Safe" !!

main = do
    currentTime <- getCurrentTime
    -- in all remaining code, currentTime has type "UTCTime"
    ...
    getDifference currentTime userTime

This doesn't work for me.

Correct me if I'm doing something wrong here. Here's my code:

           main = do
                  now <- getCurrentTime
                  diffUTCTime now bree
          bree = readMay "1981-06-16 04:35:25" :: UTCTime

This gives an error like this;
io.hs:28:5:
    Couldn't match expected type ‘IO b’
                with actual type ‘NominalDiffTime’
    Relevant bindings include main :: IO b (bound at io.hs:26:1)
    In a stmt of a 'do' block: diffUTCTime now bree
    In the expression:
      do { now <- getCurrentTime;
           diffUTCTime now bree }


On Thu, May 14, 2015 at 3:55 PM, Kostiantyn Rybnikov <k-bx at k-bx.com> wrote:

> Hi Dananji!
>
> First of all, for more explicit failure-handling I suggest using "readMay"
> from package "safe" [0] instead of "read" whenever possible.
>
> Alternative to using "read", if you know date format of input-data, you
> can take a look at "UNIX-style parsing" section at Data.Time.Format module
> [1]. If you have older "time" package, you'd probably use parseTime, for
> newer versions it is recommended to use parseTimeM.
>
> Here's an example:
>
> ```
> ➜  ~  ghci
> GHCi, version 7.8.4: http://www.haskell.org/ghc/  :? for help
> Prelude> import Data.Time.Format
> Prelude Data.Time.Format> import System.Locale
> Prelude Data.Time.Format System.Locale> import Data.Time.Clock
> Prelude Data.Time.Format System.Locale Data.Time.Clock> parseTime
> defaultTimeLocale "%F %X" "2014-01-02 11:12:30" :: Maybe UTCTime
> Just 2014-01-02 11:12:30 UTC
> ```
>
> If you have a value of type "IO <something>", you can "extract" it when
> being in IO monad like this:
>
> main = do
>     currentTime <- getCurrentTime
>     -- in all remaining code, currentTime has type "UTCTime"
>     ...
>     getDifference currentTime userTime
>
> In terms of "sugar-less" way to use a value from "IO <something>", you can
> also use it like this:
>
> getCurrentTime >>= \currentTime -> doSomething currentTime
>
> Hope this helps.
>
> [0]: https://hackage.haskell.org/package/safe
> [1]:
> http://hackage.haskell.org/package/time-1.5.0.1/docs/Data-Time-Format.html
>
>
> On Thu, May 14, 2015 at 10:20 AM, Dananji Liyanage <dan9131 at gmail.com>
> wrote:
>
>> Hi All,
>>
>> I'm trying out the date time conversions in Haskell.
>>
>> How do I convert a keyboard input (IO String) to UTCTime?
>>
>> This is how I'm doing (probably there's a better way),
>>               convDay x = read (x ++ " 00:00:00") :: UTCTime
>> ​​
>>
>> Another thing, how do I convert getCurrentTime (IO UTCTime) to UTCTime in
>> order to get the time difference between the keyboard input date and today?
>>
>> --
>> Regards,
>> Dananji Liyanage
>>
>> _______________________________________________
>> Beginners mailing list
>> Beginners at haskell.org
>> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
>>
>>
>
> _______________________________________________
> Beginners mailing list
> Beginners at haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
>
>


-- 
Regards,
Dananji Liyanage
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/beginners/attachments/20150514/727546b0/attachment.html>


More information about the Beginners mailing list