[Haskell-cafe] Converting string to System.Time.ClockTime

dokondr dokondr at gmail.com
Thu Dec 8 16:30:17 CET 2011


Ok, maybe you could advise what packages to use for this simple scenario:

I have two text strings with dates:
s1 = "Wed, 07 Dec 2011 10:09:21 +0000"
s2 = "Wed, 07 Dec 2011 10:11:00 +0000"

I need:
1) Find how many seconds are between  these dates
2) Calculate the date in the middle between these dates
3) Print out all three dates in the different format, like these:
 2011,  7 Dec, Wed, 10:11:00

What functions should I use to implement this?

On Thu, Dec 8, 2011 at 7:13 PM, Antoine Latter <aslatter at gmail.com> wrote:

> On Thu, Dec 8, 2011 at 9:01 AM, dokondr <dokondr at gmail.com> wrote:
> > Now, when I have managed to convert UTCTime to seconds (see code below) I
> > got stuck trying to convert from UTCTime to CalendarTime, how to do this?
> >
> >
>
> It might be easier to use 'diffUTCTime' and 'addUTCTime' instead of
> converting to and from POSIX seconds.
>
> What do you need the 'CalendarTime' for? I recommend not mixing the
> 'time' and 'old-time' packages if you can avoid it.
>
> If you really need to for inter-operating with some other library, it
> looks like you can use the 'datetime' package to convert from a
> UTCTime to a ClockTime, and then you can use the 'old-time' package to
> convert from a 'ClockTime' to a 'CalendarTime'.
>
> Antoine
>
> > import Data.Time.Format
> > import Data.Time.Clock
> > import Locale
> > import Data.Maybe
> > import Data.Time.Clock.POSIX
> >
> >
> > s1 = "Wed, 07 Dec 2011 10:09:21 +0000"
> > s2 = "Wed, 07 Dec 2011 10:11:00 +0000"
> > t1 = fromJust $ tryParseTime s1
> > t2 = fromJust $ tryParseTime s2
> > pt1 = utcTimeToPOSIXSeconds t1  -- :: UTCTime -> POSIXTime
> > pt2 = utcTimeToPOSIXSeconds t2
> > pt3 = pt1 + (pt2 - pt1) / 2
> > t3 = posixSecondsToUTCTime pt3
> >
> >
> > t = compare t1 t2
> >
> > tryParseTime :: String -> Maybe UTCTime
> > tryParseTime timeStr = tryFormat (parseTime defaultTimeLocale timeFormat1
> > timeStr :: Maybe UTCTime)
> >    where
> >      tryFormat time
> >         | time == Nothing = parseTime defaultTimeLocale timeFormat2
> timeStr
> > :: Maybe UTCTime
> >         | otherwise = time
> >
> >      timeFormat1 = "%a, %d %b %Y %T %z"
> >      timeFormat2 = "%m/%e/%Y %l:%M:%S %p"
> > -- timeFormat1 = "%m/%d/%Y %l:%M:%S %p"
> >
> >
> >
> > On Thu, Dec 8, 2011 at 6:30 PM, dokondr <dokondr at gmail.com> wrote:
> >>
> >> I need to parse time strings like "Wed, 07 Dec 2011 10:09:21 +0000" to a
> >> type that:
> >> 1) implements Eq, Ord
> >> 2) is numerical, so I could subtract one value from another to find the
> >> difference or interval length
> >>
> >> To answer 1) requirement I wrote the following snippet. Yet I could not
> >> subtract  UTCTime values. How can I convert them to milliseconds?
> >>
> >> import Data.Time.Format
> >> import Data.Time.Clock
> >> import Locale
> >> import Data.Maybe
> >>
> >> s1 = "Wed, 07 Dec 2011 10:09:21 +0000"
> >> s2 = "Wed, 07 Dec 2011 10:11:00 +0000"
> >> t1 = fromJust $ tryParseTime s1
> >> t2 = fromJust $ tryParseTime s2
> >>
> >> t = compare t1 t2
> >>
> >> tryParseTime :: String -> Maybe UTCTime
> >> tryParseTime timeStr = tryFormat (parseTime defaultTimeLocale
> timeFormat1
> >> timeStr :: Maybe UTCTime)
> >>    where
> >>      tryFormat time
> >>         | time == Nothing = parseTime defaultTimeLocale timeFormat2
> >> timeStr :: Maybe UTCTime
> >>         | otherwise = time
> >>
> >>      timeFormat1 = "%a, %d %b %Y %T %z"
> >>      timeFormat2 = "%m/%e/%Y %l:%M:%S %p"
> >>
> >>
> >>
> >>
> >> On Thu, Dec 8, 2011 at 6:12 PM, Erik Hesselink <hesselink at gmail.com>
> >> wrote:
> >>>
> >>> I'm not sure if you really need ClockTime (from old-time), but if you
> >>> don't, the types from the 'time' package are all parseable with
> >>> `parseTime` [1].
> >>>
> >>> Erik
> >>>
> >>> [1]
> >>>
> http://hackage.haskell.org/packages/archive/time/latest/doc/html/Data-Time-Format.html#v:parseTime
> >>>
> >>> On Thu, Dec 8, 2011 at 14:16, dokondr <dokondr at gmail.com> wrote:
> >>> > Hi,
> >>> > What would be the simplest way to convert strings like "Wed, 07 Dec
> >>> > 2011
> >>> > 10:09:21 +0000" to System.Time.ClockTime ?
> >>> >
> >>> > Thanks!
> >>> >
> >>> >
> >>> >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/haskell-cafe/attachments/20111208/11c297e2/attachment.htm>


More information about the Haskell-Cafe mailing list