haskell / time

A time library

Home Page:http://hackage.haskell.org/package/time

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Parsing padding widths with `parseTimeM`

mbg opened this issue · comments

The documentation for parseTimeM notes that "padding widths are not supported". I was wondering if there was any particular, technical reason for this (since the relevant code does not seem to have any comments explaining it) or if it has just not yet been implemented due to a lack of demand?

If it is the former, it might be useful to document this somewhere. If it is the latter, this is one expression of "demand"! Time permitting, I could have a look at implementing it myself, but I am unfamiliar with the codebase and wanted to check that there wasn't a technical reason for its omission first.

Hmm, could you give an example?

@AshleyYakeley: sure, I have a time format String as follows:

timeFormat :: String
timeFormat = iso8601DateFormat (Just "%H:%M:%S%06Q")

I can format a given time :: UTCTime using this (in GHCi):

λ formatTime defaultTimeLocale timeFormat time
"1970-01-01T00:00:00.000000"

Now I'd like to be able to parse a String value like that back into a UTCTime value, but I get a runtime error:

λ parseTimeM @IO @UTCTime True defaultTimeLocale timeFormat "1970-01-01T00:00:00.000000"
*** Exception: user error (parseTimeM: no parse of "1970-01-01T00:00:00.000000")

This seems to happen due to the %06Q part of the formatting String and lines up with what the documentation for parseTimeM is describing as "padding widths are not supported".

If you omit the padding width when parsing, it will parse:

ghci> parseTimeM @IO @UTCTime True defaultTimeLocale (iso8601DateFormat (Just "%H:%M:%S%Q")) "1970-01-01T00:00:00.000000"
1970-01-01 00:00:00 UTC

That does indeed seem to work, thank you @AshleyYakeley!!

I don't see this mentioned in the documentation right now, but it might be a useful piece of information to include for parseTimeM -- would you accept a PR which adds a sentence about this?

Is that really necessary?