2008/11/12 Lyle Kopnicky <[EMAIL PROTECTED]> > Hi folks, > > I had some code using the oldtime package, and want to convert it to use > the time package. > > One of the things I need to do is calculate the number of seconds since > midnight. The easy part is getting a TimeDiff result: > > utc <- getCurrentTime > tz <- getCurrentTimeZone > let td = timeOfDayToTime $ localTimeOfDay $ utcToLocalTime tz utc > > Now td is a TimeDiff representation of the number of seconds since > midnight. It prints nicely, but I'm having a heck of a time figuring out how > to truncate it to an Int. > > The floor function is only supported by the RealFrac class. Although > TimeDiff has an instance of RealFrac and Fractional, it doesn't have an > instance of RealFrac. I looked up the various to* and from* functions and > have come up short. fromEnum yields an Int but it's the wrong value. I know > I could use show and then use readS to get an Integer, or use formatTime > (and reparse that), but that's a hack. > > I can convert it to a TimeOfDay which gives me hours, minutes, and seconds, > but then I have to do arithmetic on it, and the seconds are of type Pico, > which I can't call floor on either. I can convert it to a Rational via > timeOfDayToDayFraction, but a TimeDiff is already a Rational those don't > have floor. > > What am I missing? There has got to be an easy way to count seconds! >
Well, you could always (read . takeWhile (not . (=='.')) . show), but here's a better way: let x = toRational td in numerator x `div` denominator x This was just the first thing I could come up with. I bet there's a nicer way. - Phil > Thanks, > Lyle > > > _______________________________________________ > Haskell-Cafe mailing list > Haskell-Cafe@haskell.org > http://www.haskell.org/mailman/listinfo/haskell-cafe > >
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe