Search code examples
datetimehaskelliso8601

How to format UTCTime as ISO 8601 in Haskell


I would like to convert a full date/time to ISO 8601 format like JavaScript's new Date().toISOString() does, giving a YYYY-MM-DDTHH:mm:ss.sssZ format.

I cannot find a base library function or package to do this.


Solution

  • I don't see any pre-existing function for doing this, but you can make one easily using Data.Time.Format.formatTime:

    import System.Locale (defaultTimeLocale)
    import Data.Time.Format (formatTime)
    
    iso8601 :: UTCTime -> String
    iso8601 = formatTime defaultTimeLocale "%FT%T%QZ"
    

    (You need to convert the time to a UTCTime before passing it to this function in order for it to actually display the actual UTC time.)